| 
									
										
										
										
											1991-02-19 12:39:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | /* Generic object operations; and implementation of None (NoObject) */ | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | #include "Python.h"
 | 
					
						
							| 
									
										
										
										
											2006-08-17 05:42:55 +00:00
										 |  |  | #include "sliceobject.h" /* For PyEllipsis_Type */
 | 
					
						
							| 
									
										
										
										
											2009-04-20 02:09:13 +00:00
										 |  |  | #include "frameobject.h"
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												object.h special-build macro minefield:  renamed all the new lexical
helper macros to something saner, and used them appropriately in other
files too, to reduce #ifdef blocks.
classobject.c, instance_dealloc():  One of my worst Python Memories is
trying to fix this routine a few years ago when COUNT_ALLOCS was defined
but Py_TRACE_REFS wasn't.  The special-build code here is way too
complicated.  Now it's much simpler.  Difference:  in a Py_TRACE_REFS
build, the instance is no longer in the doubly-linked list of live
objects while its __del__ method is executing, and that may be visible
via sys.getobjects() called from a __del__ method.  Tough -- the object
is presumed dead while its __del__ is executing anyway, and not calling
_Py_NewReference() at the start allows enormous code simplification.
typeobject.c, call_finalizer():  The special-build instance_dealloc()
pain apparently spread to here too via cut-'n-paste, and this is much
simpler now too.  In addition, I didn't understand why this routine
was calling _PyObject_GC_TRACK() after a resurrection, since there's no
plausible way _PyObject_GC_UNTRACK() could have been called on the
object by this point.  I suspect it was left over from pasting the
instance_delloc() code.  Instead asserted that the object is still
tracked.  Caution:  I suspect we don't have a test that actually
exercises the subtype_dealloc() __del__-resurrected-me code.
											
										 
											2002-07-11 06:23:50 +00:00
										 |  |  | #ifdef Py_REF_DEBUG
 | 
					
						
							| 
									
										
										
										
											2006-03-04 20:00:59 +00:00
										 |  |  | Py_ssize_t _Py_RefTotal; | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Py_ssize_t | 
					
						
							|  |  |  | _Py_GetRefTotal(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *o; | 
					
						
							|  |  |  | 	Py_ssize_t total = _Py_RefTotal; | 
					
						
							|  |  |  |         /* ignore the references to the dummy object of the dicts and sets
 | 
					
						
							|  |  |  |            because they are not reliable and not useful (now that the | 
					
						
							|  |  |  |            hash table code is well-tested) */ | 
					
						
							|  |  |  | 	o = _PyDict_Dummy(); | 
					
						
							|  |  |  | 	if (o != NULL) | 
					
						
							|  |  |  | 		total -= o->ob_refcnt; | 
					
						
							|  |  |  | 	o = _PySet_Dummy(); | 
					
						
							|  |  |  | 	if (o != NULL) | 
					
						
							|  |  |  | 		total -= o->ob_refcnt; | 
					
						
							|  |  |  | 	return total; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif /* Py_REF_DEBUG */
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-29 13:42:14 +00:00
										 |  |  | int Py_DivisionWarningFlag; | 
					
						
							| 
									
										
											  
											
												Add warning mode for classic division, almost exactly as specified in
PEP 238.  Changes:
- add a new flag variable Py_DivisionWarningFlag, declared in
  pydebug.h, defined in object.c, set in main.c, and used in
  {int,long,float,complex}object.c.  When this flag is set, the
  classic division operator issues a DeprecationWarning message.
- add a new API PyRun_SimpleStringFlags() to match
  PyRun_SimpleString().  The main() function calls this so that
  commands run with -c can also benefit from -Dnew.
- While I was at it, I changed the usage message in main() somewhat:
  alphabetized the options, split it in *four* parts to fit in under
  512 bytes (not that I still believe this is necessary -- doc strings
  elsewhere are much longer), and perhaps most visibly, don't display
  the full list of options on each command line error.  Instead, the
  full list is only displayed when -h is used, and otherwise a brief
  reminder of -h is displayed.  When -h is used, write to stdout so
  that you can do `python -h | more'.
Notes:
- I don't want to use the -W option to control whether the classic
  division warning is issued or not, because the machinery to decide
  whether to display the warning or not is very expensive (it involves
  calling into the warnings.py module).  You can use -Werror to turn
  the warnings into exceptions though.
- The -Dnew option doesn't select future division for all of the
  program -- only for the __main__ module.  I don't know if I'll ever
  change this -- it would require changes to the .pyc file magic
  number to do it right, and a more global notion of compiler flags.
- You can usefully combine -Dwarn and -Dnew: this gives the __main__
  module new division, and warns about classic division everywhere
  else.
											
										 
											2001-08-31 17:40:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | /* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
 | 
					
						
							|  |  |  |    These are used by the individual routines for object creation. | 
					
						
							|  |  |  |    Do not call them otherwise, they do not initialize the object! */ | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-23 02:51:01 +00:00
										 |  |  | #ifdef Py_TRACE_REFS
 | 
					
						
							| 
									
										
										
										
											2003-03-23 17:52:28 +00:00
										 |  |  | /* Head of circular doubly-linked list of all objects.  These are linked
 | 
					
						
							|  |  |  |  * together via the _ob_prev and _ob_next members of a PyObject, which | 
					
						
							|  |  |  |  * exist only in a Py_TRACE_REFS build. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2003-03-23 02:51:01 +00:00
										 |  |  | static PyObject refchain = {&refchain, &refchain}; | 
					
						
							| 
									
										
										
										
											2003-03-23 03:33:13 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-23 17:52:28 +00:00
										 |  |  | /* Insert op at the front of the list of all objects.  If force is true,
 | 
					
						
							|  |  |  |  * op is added even if _ob_prev and _ob_next are non-NULL already.  If | 
					
						
							|  |  |  |  * force is false amd _ob_prev or _ob_next are non-NULL, do nothing. | 
					
						
							|  |  |  |  * force should be true if and only if op points to freshly allocated, | 
					
						
							|  |  |  |  * uninitialized memory, or you've unlinked op from the list and are | 
					
						
							| 
									
										
										
										
											2003-03-23 18:06:08 +00:00
										 |  |  |  * relinking it into the front. | 
					
						
							| 
									
										
										
										
											2003-03-23 17:52:28 +00:00
										 |  |  |  * Note that objects are normally added to the list via _Py_NewReference, | 
					
						
							|  |  |  |  * which is called by PyObject_Init.  Not all objects are initialized that | 
					
						
							|  |  |  |  * way, though; exceptions include statically allocated type objects, and | 
					
						
							|  |  |  |  * statically allocated singletons (like Py_True and Py_None). | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2003-03-23 03:33:13 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2003-03-23 17:52:28 +00:00
										 |  |  | _Py_AddToAllObjects(PyObject *op, int force) | 
					
						
							| 
									
										
										
										
											2003-03-23 03:33:13 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-03-23 17:52:28 +00:00
										 |  |  | #ifdef  Py_DEBUG
 | 
					
						
							|  |  |  | 	if (!force) { | 
					
						
							|  |  |  | 		/* If it's initialized memory, op must be in or out of
 | 
					
						
							|  |  |  | 		 * the list unambiguously. | 
					
						
							|  |  |  | 		 */ | 
					
						
							|  |  |  | 		assert((op->_ob_prev == NULL) == (op->_ob_next == NULL)); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2003-03-23 02:51:01 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2003-03-23 17:52:28 +00:00
										 |  |  | 	if (force || op->_ob_prev == NULL) { | 
					
						
							|  |  |  | 		op->_ob_next = refchain._ob_next; | 
					
						
							|  |  |  | 		op->_ob_prev = &refchain; | 
					
						
							|  |  |  | 		refchain._ob_next->_ob_prev = op; | 
					
						
							|  |  |  | 		refchain._ob_next = op; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif	/* Py_TRACE_REFS */
 | 
					
						
							| 
									
										
										
										
											2003-03-23 02:51:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | #ifdef COUNT_ALLOCS
 | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | static PyTypeObject *type_list; | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | /* All types are added to type_list, at least when
 | 
					
						
							|  |  |  |    they get one object created. That makes them | 
					
						
							|  |  |  |    immortal, which unfortunately contributes to | 
					
						
							|  |  |  |    garbage itself. If unlist_types_without_objects | 
					
						
							|  |  |  |    is set, they will be removed from the type_list | 
					
						
							|  |  |  |    once the last object is deallocated. */ | 
					
						
							| 
									
										
										
										
											2009-01-11 17:13:55 +00:00
										 |  |  | static int unlist_types_without_objects; | 
					
						
							|  |  |  | extern Py_ssize_t tuple_zero_allocs, fast_tuple_allocs; | 
					
						
							|  |  |  | extern Py_ssize_t quick_int_allocs, quick_neg_int_allocs; | 
					
						
							|  |  |  | extern Py_ssize_t null_strings, one_strings; | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | dump_counts(FILE* f) | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 	PyTypeObject *tp; | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	for (tp = type_list; tp; tp = tp->tp_next) | 
					
						
							| 
									
										
										
										
											2009-01-11 17:13:55 +00:00
										 |  |  | 		fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, " | 
					
						
							|  |  |  | 			"freed: %" PY_FORMAT_SIZE_T "d, " | 
					
						
							|  |  |  | 			"max in use: %" PY_FORMAT_SIZE_T "d\n", | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 			tp->tp_name, tp->tp_allocs, tp->tp_frees, | 
					
						
							| 
									
										
										
										
											1993-10-25 08:40:52 +00:00
										 |  |  | 			tp->tp_maxalloc); | 
					
						
							| 
									
										
										
										
											2009-01-11 17:13:55 +00:00
										 |  |  | 	fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, " | 
					
						
							|  |  |  | 		"empty: %" PY_FORMAT_SIZE_T "d\n", | 
					
						
							| 
									
										
										
										
											1993-10-25 08:40:52 +00:00
										 |  |  | 		fast_tuple_allocs, tuple_zero_allocs); | 
					
						
							| 
									
										
										
										
											2009-01-11 17:13:55 +00:00
										 |  |  | 	fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, " | 
					
						
							|  |  |  | 		"neg: %" PY_FORMAT_SIZE_T "d\n", | 
					
						
							| 
									
										
										
										
											1993-10-25 08:40:52 +00:00
										 |  |  | 		quick_int_allocs, quick_neg_int_allocs); | 
					
						
							| 
									
										
										
										
											2009-01-11 17:13:55 +00:00
										 |  |  | 	fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, " | 
					
						
							|  |  |  | 		"1-strings: %" PY_FORMAT_SIZE_T "d\n", | 
					
						
							| 
									
										
										
										
											1993-10-25 08:40:52 +00:00
										 |  |  | 		null_strings, one_strings); | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-08-29 09:18:14 +00:00
										 |  |  | PyObject * | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | get_counts(void) | 
					
						
							| 
									
										
										
										
											1995-08-29 09:18:14 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	PyTypeObject *tp; | 
					
						
							|  |  |  | 	PyObject *result; | 
					
						
							|  |  |  | 	PyObject *v; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	result = PyList_New(0); | 
					
						
							|  |  |  | 	if (result == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	for (tp = type_list; tp; tp = tp->tp_next) { | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 		v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs, | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 				  tp->tp_frees, tp->tp_maxalloc); | 
					
						
							| 
									
										
										
										
											1995-08-29 09:18:14 +00:00
										 |  |  | 		if (v == NULL) { | 
					
						
							|  |  |  | 			Py_DECREF(result); | 
					
						
							|  |  |  | 			return NULL; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (PyList_Append(result, v) < 0) { | 
					
						
							|  |  |  | 			Py_DECREF(v); | 
					
						
							|  |  |  | 			Py_DECREF(result); | 
					
						
							|  |  |  | 			return NULL; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		Py_DECREF(v); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return result; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | inc_count(PyTypeObject *tp) | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 	if (tp->tp_next == NULL && tp->tp_prev == NULL) { | 
					
						
							| 
									
										
										
										
											1995-04-06 14:46:26 +00:00
										 |  |  | 		/* first time; insert in linked list */ | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | 		if (tp->tp_next != NULL) /* sanity check */ | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 			Py_FatalError("XXX inc_count sanity check"); | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 		if (type_list) | 
					
						
							|  |  |  | 			type_list->tp_prev = tp; | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | 		tp->tp_next = type_list; | 
					
						
							| 
									
										
										
										
											2002-07-08 22:11:52 +00:00
										 |  |  | 		/* Note that as of Python 2.2, heap-allocated type objects
 | 
					
						
							|  |  |  | 		 * can go away, but this code requires that they stay alive | 
					
						
							|  |  |  | 		 * until program exit.  That's why we're careful with | 
					
						
							|  |  |  | 		 * refcounts here.  type_list gets a new reference to tp, | 
					
						
							|  |  |  | 		 * while ownership of the reference type_list used to hold | 
					
						
							|  |  |  | 		 * (if any) was transferred to tp->tp_next in the line above. | 
					
						
							|  |  |  | 		 * tp is thus effectively immortal after this. | 
					
						
							|  |  |  | 		 */ | 
					
						
							|  |  |  | 		Py_INCREF(tp); | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | 		type_list = tp; | 
					
						
							| 
									
										
										
										
											2003-03-23 03:04:32 +00:00
										 |  |  | #ifdef Py_TRACE_REFS
 | 
					
						
							| 
									
										
										
										
											2003-03-23 17:52:28 +00:00
										 |  |  | 		/* Also insert in the doubly-linked list of all objects,
 | 
					
						
							|  |  |  | 		 * if not already there. | 
					
						
							|  |  |  | 		 */ | 
					
						
							|  |  |  | 		_Py_AddToAllObjects((PyObject *)tp, 0); | 
					
						
							| 
									
										
										
										
											2003-03-23 02:51:01 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	tp->tp_allocs++; | 
					
						
							|  |  |  | 	if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc) | 
					
						
							|  |  |  | 		tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees; | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | void dec_count(PyTypeObject *tp) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	tp->tp_frees++; | 
					
						
							|  |  |  | 	if (unlist_types_without_objects && | 
					
						
							|  |  |  | 	    tp->tp_allocs == tp->tp_frees) { | 
					
						
							|  |  |  | 		/* unlink the type from type_list */ | 
					
						
							|  |  |  | 		if (tp->tp_prev) | 
					
						
							|  |  |  | 			tp->tp_prev->tp_next = tp->tp_next; | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			type_list = tp->tp_next; | 
					
						
							|  |  |  | 		if (tp->tp_next) | 
					
						
							|  |  |  | 			tp->tp_next->tp_prev = tp->tp_prev; | 
					
						
							|  |  |  | 		tp->tp_next = tp->tp_prev = NULL; | 
					
						
							|  |  |  | 		Py_DECREF(tp); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-10-11 12:54:31 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-09 02:57:01 +00:00
										 |  |  | #ifdef Py_REF_DEBUG
 | 
					
						
							|  |  |  | /* Log a fatal error; doesn't return. */ | 
					
						
							|  |  |  | void | 
					
						
							|  |  |  | _Py_NegativeRefcount(const char *fname, int lineno, PyObject *op) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	char buf[300]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	PyOS_snprintf(buf, sizeof(buf), | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 		      "%s:%i object at %p has negative ref count " | 
					
						
							|  |  |  | 		      "%" PY_FORMAT_SIZE_T "d", | 
					
						
							|  |  |  | 		      fname, lineno, op, op->ob_refcnt); | 
					
						
							| 
									
										
										
										
											2002-07-09 02:57:01 +00:00
										 |  |  | 	Py_FatalError(buf); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* Py_REF_DEBUG */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-22 17:23:49 +00:00
										 |  |  | void | 
					
						
							|  |  |  | Py_IncRef(PyObject *o) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Py_XINCREF(o); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							|  |  |  | Py_DecRef(PyObject *o) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Py_XDECREF(o); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | PyObject * | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyObject_Init(PyObject *op, PyTypeObject *tp) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2002-10-11 20:37:24 +00:00
										 |  |  | 	if (op == NULL) | 
					
						
							|  |  |  | 		return PyErr_NoMemory(); | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | 	/* Any changes should be reflected in PyObject_INIT (objimpl.h) */ | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	Py_TYPE(op) = tp; | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 	_Py_NewReference(op); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	return op; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-15 21:31:03 +00:00
										 |  |  | PyVarObject * | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size) | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2002-10-11 20:37:24 +00:00
										 |  |  | 	if (op == NULL) | 
					
						
							|  |  |  | 		return (PyVarObject *) PyErr_NoMemory(); | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | 	/* Any changes should be reflected in PyObject_INIT_VAR */ | 
					
						
							|  |  |  | 	op->ob_size = size; | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	Py_TYPE(op) = tp; | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | 	_Py_NewReference((PyObject *)op); | 
					
						
							|  |  |  | 	return op; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PyObject * | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _PyObject_New(PyTypeObject *tp) | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	PyObject *op; | 
					
						
							|  |  |  | 	op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp)); | 
					
						
							|  |  |  | 	if (op == NULL) | 
					
						
							|  |  |  | 		return PyErr_NoMemory(); | 
					
						
							|  |  |  | 	return PyObject_INIT(op, tp); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-15 21:31:03 +00:00
										 |  |  | PyVarObject * | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | _PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | 	PyVarObject *op; | 
					
						
							| 
									
										
										
										
											2001-10-07 03:54:51 +00:00
										 |  |  | 	const size_t size = _PyObject_VAR_SIZE(tp, nitems); | 
					
						
							| 
									
										
										
										
											2001-10-06 21:27:34 +00:00
										 |  |  | 	op = (PyVarObject *) PyObject_MALLOC(size); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	if (op == NULL) | 
					
						
							| 
									
										
										
										
											1997-05-15 21:31:03 +00:00
										 |  |  | 		return (PyVarObject *)PyErr_NoMemory(); | 
					
						
							| 
									
										
										
										
											2001-10-06 21:27:34 +00:00
										 |  |  | 	return PyObject_INIT_VAR(op, tp, nitems); | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-13 20:13:12 +00:00
										 |  |  | /* Implementation of PyObject_Print with recursion checking */ | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | internal_print(PyObject *op, FILE *fp, int flags, int nesting) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1991-07-27 21:40:24 +00:00
										 |  |  | 	int ret = 0; | 
					
						
							| 
									
										
										
										
											2003-01-13 20:13:12 +00:00
										 |  |  | 	if (nesting > 10) { | 
					
						
							|  |  |  | 		PyErr_SetString(PyExc_RuntimeError, "print recursion"); | 
					
						
							|  |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 	if (PyErr_CheckSignals()) | 
					
						
							| 
									
										
										
										
											1991-06-07 16:10:43 +00:00
										 |  |  | 		return -1; | 
					
						
							| 
									
										
										
										
											1998-04-28 16:06:54 +00:00
										 |  |  | #ifdef USE_STACKCHECK
 | 
					
						
							|  |  |  | 	if (PyOS_CheckStack()) { | 
					
						
							| 
									
										
										
										
											2000-10-24 19:57:45 +00:00
										 |  |  | 		PyErr_SetString(PyExc_MemoryError, "stack overflow"); | 
					
						
							| 
									
										
										
										
											1998-04-28 16:06:54 +00:00
										 |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2000-01-12 16:28:58 +00:00
										 |  |  | 	clearerr(fp); /* Clear any previous error condition */ | 
					
						
							| 
									
										
										
										
											1991-06-07 16:10:43 +00:00
										 |  |  | 	if (op == NULL) { | 
					
						
							| 
									
										
											  
											
												Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r58096 | brett.cannon | 2007-09-10 23:38:27 +0200 (Mon, 10 Sep 2007) | 4 lines
  Fix a possible segfault from recursing too deep to get the repr of a list.
  Closes issue #1096.
........
  r58097 | bill.janssen | 2007-09-10 23:51:02 +0200 (Mon, 10 Sep 2007) | 33 lines
  More work on SSL support.
  * Much expanded test suite:
    All protocols tested against all other protocols.
    All protocols tested with all certificate options.
    Tests for bad key and bad cert.
    Test of STARTTLS functionality.
    Test of RAND_* functions.
  * Fixes for threading/malloc bug.
  * Issue 1065 fixed:
    sslsocket class renamed to SSLSocket.
    sslerror class renamed to SSLError.
    Function "wrap_socket" now used to wrap an existing socket.
  * Issue 1583946 finally fixed:
    Support for subjectAltName added.
    Subject name now returned as proper DN list of RDNs.
  * SSLError exported from socket as "sslerror".
  * RAND_* functions properly exported from ssl.py.
  * Documentation improved:
    Example of how to create a self-signed certificate.
    Better indexing.
........
  r58098 | guido.van.rossum | 2007-09-11 00:02:25 +0200 (Tue, 11 Sep 2007) | 9 lines
  Patch # 1140 (my code, approved by Effbot).
  Make sure the type of the return value of re.sub(x, y, z) is the type
  of y+x (i.e. unicode if either is unicode, str if they are both str)
  even if there are no substitutions or if x==z (which triggered various
  special cases in join_list()).
  Could be backported to 2.5; no need to port to 3.0.
........
  r58099 | guido.van.rossum | 2007-09-11 00:36:02 +0200 (Tue, 11 Sep 2007) | 8 lines
  Patch # 1026 by Benjamin Aranguren (with Alex Martelli):
  Backport abc.py and isinstance/issubclass overloading to 2.6.
  I had to backport test_typechecks.py myself, and make one small change
  to abc.py to avoid duplicate work when x.__class__ and type(x) are the
  same.
........
  r58100 | bill.janssen | 2007-09-11 01:41:24 +0200 (Tue, 11 Sep 2007) | 3 lines
  A better way of finding an open port to test with.
........
  r58101 | bill.janssen | 2007-09-11 03:09:19 +0200 (Tue, 11 Sep 2007) | 4 lines
  Make sure test_ssl doesn't reference the ssl module in a
  context where it can't be imported.
........
  r58102 | bill.janssen | 2007-09-11 04:42:07 +0200 (Tue, 11 Sep 2007) | 3 lines
  Fix some documentation bugs.
........
  r58103 | nick.coghlan | 2007-09-11 16:01:18 +0200 (Tue, 11 Sep 2007) | 1 line
  Always use the -E flag when spawning subprocesses in test_cmd_line (Issue 1056)
........
  r58106 | thomas.heller | 2007-09-11 21:17:48 +0200 (Tue, 11 Sep 2007) | 3 lines
  Disable some tests that fail on the 'ppc Debian unstable' buildbot to
  find out if they cause the segfault on the 'alpha Debian' machine.
........
  r58108 | brett.cannon | 2007-09-11 23:02:28 +0200 (Tue, 11 Sep 2007) | 6 lines
  Generators had their throw() method allowing string exceptions.  That's a
  no-no.
  Fixes issue #1147.  Need to fix 2.5 to raise a proper warning if a string
  exception is passed in.
........
  r58112 | georg.brandl | 2007-09-12 20:03:51 +0200 (Wed, 12 Sep 2007) | 3 lines
  New documentation page for the bdb module.
  (This doesn't need to be merged to Py3k.)
........
  r58114 | georg.brandl | 2007-09-12 20:05:57 +0200 (Wed, 12 Sep 2007) | 2 lines
  Bug #1152: use non-deprecated name in example.
........
  r58115 | georg.brandl | 2007-09-12 20:08:33 +0200 (Wed, 12 Sep 2007) | 2 lines
  Fix #1122: wrong return type documented for various _Size() functions.
........
  r58117 | georg.brandl | 2007-09-12 20:10:56 +0200 (Wed, 12 Sep 2007) | 2 lines
  Fix #1139: PyFile_Encoding really is PyFile_SetEncoding.
........
  r58119 | georg.brandl | 2007-09-12 20:29:18 +0200 (Wed, 12 Sep 2007) | 2 lines
  bug #1154: release memory allocated by "es" PyArg_ParseTuple format specifier.
........
  r58121 | bill.janssen | 2007-09-12 20:52:05 +0200 (Wed, 12 Sep 2007) | 1 line
  root certificate for https://svn.python.org/, used in test_ssl
........
  r58122 | georg.brandl | 2007-09-12 21:00:07 +0200 (Wed, 12 Sep 2007) | 3 lines
  Bug #1153: repr.repr() now doesn't require set and dictionary items
  to be orderable to properly represent them.
........
  r58125 | georg.brandl | 2007-09-12 21:29:28 +0200 (Wed, 12 Sep 2007) | 4 lines
  #1120: put explicit version in the shebang lines of pydoc, idle
  and smtpd.py scripts that are installed by setup.py. That way, they
  work when only "make altinstall" is used.
........
  r58139 | mark.summerfield | 2007-09-13 16:54:30 +0200 (Thu, 13 Sep 2007) | 9 lines
  Replaced variable o with obj in operator.rst because o is easy to
  confuse.
  Added a note about Python 3's collections.Mapping etc., above section
  that describes isMappingType() etc.
  Added xrefs between os, os.path, fileinput, and open().
........
  r58143 | facundo.batista | 2007-09-13 20:13:15 +0200 (Thu, 13 Sep 2007) | 7 lines
  Merged the decimal-branch (revisions 54886 to 58140). Decimal is now
  fully updated to the latests Decimal Specification (v1.66) and the
  latests test cases (v2.56).
  Thanks to Mark Dickinson for all his help during this process.
........
  r58145 | facundo.batista | 2007-09-13 20:42:09 +0200 (Thu, 13 Sep 2007) | 7 lines
  Put the parameter watchexp back in (changed watchexp from an int
  to a bool).  Also second argument to watchexp is now converted
  to Decimal, just as with all the other two-argument operations.
  Thanks Mark Dickinson.
........
  r58147 | andrew.kuchling | 2007-09-14 00:49:34 +0200 (Fri, 14 Sep 2007) | 1 line
  Add various items
........
  r58148 | andrew.kuchling | 2007-09-14 00:50:10 +0200 (Fri, 14 Sep 2007) | 1 line
  Make target unique
........
  r58154 | facundo.batista | 2007-09-14 20:58:34 +0200 (Fri, 14 Sep 2007) | 3 lines
  Included the new functions, and new descriptions.
........
  r58155 | thomas.heller | 2007-09-14 21:40:35 +0200 (Fri, 14 Sep 2007) | 2 lines
  ctypes.util.find_library uses dump(1) instead of objdump(1) on Solaris.
  Fixes issue #1777530; will backport to release25-maint.
........
  r58159 | facundo.batista | 2007-09-14 23:29:52 +0200 (Fri, 14 Sep 2007) | 3 lines
  Some additions (examples and a bit on the tutorial).
........
  r58160 | georg.brandl | 2007-09-15 18:53:36 +0200 (Sat, 15 Sep 2007) | 2 lines
  Remove bdb from the "undocumented modules" list.
........
  r58164 | bill.janssen | 2007-09-17 00:06:00 +0200 (Mon, 17 Sep 2007) | 15 lines
  Add support for asyncore server-side SSL support.  This requires
  adding the 'makefile' method to ssl.SSLSocket, and importing the
  requisite fakefile class from socket.py, and making the appropriate
  changes to it to make it use the SSL connection.
  Added sample HTTPS server to test_ssl.py, and test that uses it.
  Change SSL tests to use https://svn.python.org/, instead of
  www.sf.net and pop.gmail.com.
  Added utility function to ssl module, get_server_certificate,
  to wrap up the several things to be done to pull a certificate
  from a remote server.
........
  r58173 | bill.janssen | 2007-09-17 01:16:46 +0200 (Mon, 17 Sep 2007) | 1 line
  use binary mode when reading files for testAsyncore to make Windows happy
........
  r58175 | raymond.hettinger | 2007-09-17 02:55:00 +0200 (Mon, 17 Sep 2007) | 7 lines
  Sync-up named tuples with the latest version of the ASPN recipe.
  Allows optional commas in the field-name spec (help when named tuples are used in conjuction with sql queries).
  Adds the __fields__ attribute for introspection and to support conversion to dictionary form.
  Adds a  __replace__() method similar to str.replace() but using a named field as a target.
  Clean-up spelling and presentation in doc-strings.
........
  r58176 | brett.cannon | 2007-09-17 05:28:34 +0200 (Mon, 17 Sep 2007) | 5 lines
  Add a bunch of GIL release/acquire points in tp_print implementations and for
  PyObject_Print().
  Closes issue #1164.
........
  r58177 | sean.reifschneider | 2007-09-17 07:45:04 +0200 (Mon, 17 Sep 2007) | 2 lines
  issue1597011: Fix for bz2 module corner-case error due to error checking bug.
........
  r58180 | facundo.batista | 2007-09-17 18:26:50 +0200 (Mon, 17 Sep 2007) | 3 lines
  Decimal is updated, :)
........
  r58181 | facundo.batista | 2007-09-17 19:30:13 +0200 (Mon, 17 Sep 2007) | 5 lines
  The methods always return Decimal classes, even if they're
  executed through a subclass (thanks Mark Dickinson).
  Added a bit of testing for this.
........
  r58183 | sean.reifschneider | 2007-09-17 22:53:21 +0200 (Mon, 17 Sep 2007) | 2 lines
  issue1082: Fixing platform and system for Vista.
........
  r58185 | andrew.kuchling | 2007-09-18 03:36:16 +0200 (Tue, 18 Sep 2007) | 1 line
  Add item; sort properly
........
  r58186 | raymond.hettinger | 2007-09-18 05:33:19 +0200 (Tue, 18 Sep 2007) | 1 line
  Handle corner cased on 0-tuples and 1-tuples.  Add verbose option so people can see how it works.
........
  r58192 | georg.brandl | 2007-09-18 09:24:40 +0200 (Tue, 18 Sep 2007) | 2 lines
  A bit of reordering, also show more subheadings in the lang ref index.
........
  r58193 | facundo.batista | 2007-09-18 18:53:18 +0200 (Tue, 18 Sep 2007) | 4 lines
  Speed up of the various division operations (remainder, divide,
  divideint and divmod). Thanks Mark Dickinson.
........
  r58197 | raymond.hettinger | 2007-09-19 00:18:02 +0200 (Wed, 19 Sep 2007) | 1 line
  Cleanup docs for NamedTuple.
........
											
										 
											2007-09-19 03:06:30 +00:00
										 |  |  | 		Py_BEGIN_ALLOW_THREADS | 
					
						
							| 
									
										
										
										
											1991-06-07 16:10:43 +00:00
										 |  |  | 		fprintf(fp, "<nil>"); | 
					
						
							| 
									
										
											  
											
												Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r58096 | brett.cannon | 2007-09-10 23:38:27 +0200 (Mon, 10 Sep 2007) | 4 lines
  Fix a possible segfault from recursing too deep to get the repr of a list.
  Closes issue #1096.
........
  r58097 | bill.janssen | 2007-09-10 23:51:02 +0200 (Mon, 10 Sep 2007) | 33 lines
  More work on SSL support.
  * Much expanded test suite:
    All protocols tested against all other protocols.
    All protocols tested with all certificate options.
    Tests for bad key and bad cert.
    Test of STARTTLS functionality.
    Test of RAND_* functions.
  * Fixes for threading/malloc bug.
  * Issue 1065 fixed:
    sslsocket class renamed to SSLSocket.
    sslerror class renamed to SSLError.
    Function "wrap_socket" now used to wrap an existing socket.
  * Issue 1583946 finally fixed:
    Support for subjectAltName added.
    Subject name now returned as proper DN list of RDNs.
  * SSLError exported from socket as "sslerror".
  * RAND_* functions properly exported from ssl.py.
  * Documentation improved:
    Example of how to create a self-signed certificate.
    Better indexing.
........
  r58098 | guido.van.rossum | 2007-09-11 00:02:25 +0200 (Tue, 11 Sep 2007) | 9 lines
  Patch # 1140 (my code, approved by Effbot).
  Make sure the type of the return value of re.sub(x, y, z) is the type
  of y+x (i.e. unicode if either is unicode, str if they are both str)
  even if there are no substitutions or if x==z (which triggered various
  special cases in join_list()).
  Could be backported to 2.5; no need to port to 3.0.
........
  r58099 | guido.van.rossum | 2007-09-11 00:36:02 +0200 (Tue, 11 Sep 2007) | 8 lines
  Patch # 1026 by Benjamin Aranguren (with Alex Martelli):
  Backport abc.py and isinstance/issubclass overloading to 2.6.
  I had to backport test_typechecks.py myself, and make one small change
  to abc.py to avoid duplicate work when x.__class__ and type(x) are the
  same.
........
  r58100 | bill.janssen | 2007-09-11 01:41:24 +0200 (Tue, 11 Sep 2007) | 3 lines
  A better way of finding an open port to test with.
........
  r58101 | bill.janssen | 2007-09-11 03:09:19 +0200 (Tue, 11 Sep 2007) | 4 lines
  Make sure test_ssl doesn't reference the ssl module in a
  context where it can't be imported.
........
  r58102 | bill.janssen | 2007-09-11 04:42:07 +0200 (Tue, 11 Sep 2007) | 3 lines
  Fix some documentation bugs.
........
  r58103 | nick.coghlan | 2007-09-11 16:01:18 +0200 (Tue, 11 Sep 2007) | 1 line
  Always use the -E flag when spawning subprocesses in test_cmd_line (Issue 1056)
........
  r58106 | thomas.heller | 2007-09-11 21:17:48 +0200 (Tue, 11 Sep 2007) | 3 lines
  Disable some tests that fail on the 'ppc Debian unstable' buildbot to
  find out if they cause the segfault on the 'alpha Debian' machine.
........
  r58108 | brett.cannon | 2007-09-11 23:02:28 +0200 (Tue, 11 Sep 2007) | 6 lines
  Generators had their throw() method allowing string exceptions.  That's a
  no-no.
  Fixes issue #1147.  Need to fix 2.5 to raise a proper warning if a string
  exception is passed in.
........
  r58112 | georg.brandl | 2007-09-12 20:03:51 +0200 (Wed, 12 Sep 2007) | 3 lines
  New documentation page for the bdb module.
  (This doesn't need to be merged to Py3k.)
........
  r58114 | georg.brandl | 2007-09-12 20:05:57 +0200 (Wed, 12 Sep 2007) | 2 lines
  Bug #1152: use non-deprecated name in example.
........
  r58115 | georg.brandl | 2007-09-12 20:08:33 +0200 (Wed, 12 Sep 2007) | 2 lines
  Fix #1122: wrong return type documented for various _Size() functions.
........
  r58117 | georg.brandl | 2007-09-12 20:10:56 +0200 (Wed, 12 Sep 2007) | 2 lines
  Fix #1139: PyFile_Encoding really is PyFile_SetEncoding.
........
  r58119 | georg.brandl | 2007-09-12 20:29:18 +0200 (Wed, 12 Sep 2007) | 2 lines
  bug #1154: release memory allocated by "es" PyArg_ParseTuple format specifier.
........
  r58121 | bill.janssen | 2007-09-12 20:52:05 +0200 (Wed, 12 Sep 2007) | 1 line
  root certificate for https://svn.python.org/, used in test_ssl
........
  r58122 | georg.brandl | 2007-09-12 21:00:07 +0200 (Wed, 12 Sep 2007) | 3 lines
  Bug #1153: repr.repr() now doesn't require set and dictionary items
  to be orderable to properly represent them.
........
  r58125 | georg.brandl | 2007-09-12 21:29:28 +0200 (Wed, 12 Sep 2007) | 4 lines
  #1120: put explicit version in the shebang lines of pydoc, idle
  and smtpd.py scripts that are installed by setup.py. That way, they
  work when only "make altinstall" is used.
........
  r58139 | mark.summerfield | 2007-09-13 16:54:30 +0200 (Thu, 13 Sep 2007) | 9 lines
  Replaced variable o with obj in operator.rst because o is easy to
  confuse.
  Added a note about Python 3's collections.Mapping etc., above section
  that describes isMappingType() etc.
  Added xrefs between os, os.path, fileinput, and open().
........
  r58143 | facundo.batista | 2007-09-13 20:13:15 +0200 (Thu, 13 Sep 2007) | 7 lines
  Merged the decimal-branch (revisions 54886 to 58140). Decimal is now
  fully updated to the latests Decimal Specification (v1.66) and the
  latests test cases (v2.56).
  Thanks to Mark Dickinson for all his help during this process.
........
  r58145 | facundo.batista | 2007-09-13 20:42:09 +0200 (Thu, 13 Sep 2007) | 7 lines
  Put the parameter watchexp back in (changed watchexp from an int
  to a bool).  Also second argument to watchexp is now converted
  to Decimal, just as with all the other two-argument operations.
  Thanks Mark Dickinson.
........
  r58147 | andrew.kuchling | 2007-09-14 00:49:34 +0200 (Fri, 14 Sep 2007) | 1 line
  Add various items
........
  r58148 | andrew.kuchling | 2007-09-14 00:50:10 +0200 (Fri, 14 Sep 2007) | 1 line
  Make target unique
........
  r58154 | facundo.batista | 2007-09-14 20:58:34 +0200 (Fri, 14 Sep 2007) | 3 lines
  Included the new functions, and new descriptions.
........
  r58155 | thomas.heller | 2007-09-14 21:40:35 +0200 (Fri, 14 Sep 2007) | 2 lines
  ctypes.util.find_library uses dump(1) instead of objdump(1) on Solaris.
  Fixes issue #1777530; will backport to release25-maint.
........
  r58159 | facundo.batista | 2007-09-14 23:29:52 +0200 (Fri, 14 Sep 2007) | 3 lines
  Some additions (examples and a bit on the tutorial).
........
  r58160 | georg.brandl | 2007-09-15 18:53:36 +0200 (Sat, 15 Sep 2007) | 2 lines
  Remove bdb from the "undocumented modules" list.
........
  r58164 | bill.janssen | 2007-09-17 00:06:00 +0200 (Mon, 17 Sep 2007) | 15 lines
  Add support for asyncore server-side SSL support.  This requires
  adding the 'makefile' method to ssl.SSLSocket, and importing the
  requisite fakefile class from socket.py, and making the appropriate
  changes to it to make it use the SSL connection.
  Added sample HTTPS server to test_ssl.py, and test that uses it.
  Change SSL tests to use https://svn.python.org/, instead of
  www.sf.net and pop.gmail.com.
  Added utility function to ssl module, get_server_certificate,
  to wrap up the several things to be done to pull a certificate
  from a remote server.
........
  r58173 | bill.janssen | 2007-09-17 01:16:46 +0200 (Mon, 17 Sep 2007) | 1 line
  use binary mode when reading files for testAsyncore to make Windows happy
........
  r58175 | raymond.hettinger | 2007-09-17 02:55:00 +0200 (Mon, 17 Sep 2007) | 7 lines
  Sync-up named tuples with the latest version of the ASPN recipe.
  Allows optional commas in the field-name spec (help when named tuples are used in conjuction with sql queries).
  Adds the __fields__ attribute for introspection and to support conversion to dictionary form.
  Adds a  __replace__() method similar to str.replace() but using a named field as a target.
  Clean-up spelling and presentation in doc-strings.
........
  r58176 | brett.cannon | 2007-09-17 05:28:34 +0200 (Mon, 17 Sep 2007) | 5 lines
  Add a bunch of GIL release/acquire points in tp_print implementations and for
  PyObject_Print().
  Closes issue #1164.
........
  r58177 | sean.reifschneider | 2007-09-17 07:45:04 +0200 (Mon, 17 Sep 2007) | 2 lines
  issue1597011: Fix for bz2 module corner-case error due to error checking bug.
........
  r58180 | facundo.batista | 2007-09-17 18:26:50 +0200 (Mon, 17 Sep 2007) | 3 lines
  Decimal is updated, :)
........
  r58181 | facundo.batista | 2007-09-17 19:30:13 +0200 (Mon, 17 Sep 2007) | 5 lines
  The methods always return Decimal classes, even if they're
  executed through a subclass (thanks Mark Dickinson).
  Added a bit of testing for this.
........
  r58183 | sean.reifschneider | 2007-09-17 22:53:21 +0200 (Mon, 17 Sep 2007) | 2 lines
  issue1082: Fixing platform and system for Vista.
........
  r58185 | andrew.kuchling | 2007-09-18 03:36:16 +0200 (Tue, 18 Sep 2007) | 1 line
  Add item; sort properly
........
  r58186 | raymond.hettinger | 2007-09-18 05:33:19 +0200 (Tue, 18 Sep 2007) | 1 line
  Handle corner cased on 0-tuples and 1-tuples.  Add verbose option so people can see how it works.
........
  r58192 | georg.brandl | 2007-09-18 09:24:40 +0200 (Tue, 18 Sep 2007) | 2 lines
  A bit of reordering, also show more subheadings in the lang ref index.
........
  r58193 | facundo.batista | 2007-09-18 18:53:18 +0200 (Tue, 18 Sep 2007) | 4 lines
  Speed up of the various division operations (remainder, divide,
  divideint and divmod). Thanks Mark Dickinson.
........
  r58197 | raymond.hettinger | 2007-09-19 00:18:02 +0200 (Wed, 19 Sep 2007) | 1 line
  Cleanup docs for NamedTuple.
........
											
										 
											2007-09-19 03:06:30 +00:00
										 |  |  | 		Py_END_ALLOW_THREADS | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											1991-06-07 16:10:43 +00:00
										 |  |  | 	else { | 
					
						
							|  |  |  | 		if (op->ob_refcnt <= 0) | 
					
						
							| 
									
										
										
										
											2006-03-01 05:41:20 +00:00
										 |  |  | 			/* XXX(twouters) cast refcount to long until %zd is
 | 
					
						
							|  |  |  | 			   universally available */ | 
					
						
							| 
									
										
											  
											
												Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r58096 | brett.cannon | 2007-09-10 23:38:27 +0200 (Mon, 10 Sep 2007) | 4 lines
  Fix a possible segfault from recursing too deep to get the repr of a list.
  Closes issue #1096.
........
  r58097 | bill.janssen | 2007-09-10 23:51:02 +0200 (Mon, 10 Sep 2007) | 33 lines
  More work on SSL support.
  * Much expanded test suite:
    All protocols tested against all other protocols.
    All protocols tested with all certificate options.
    Tests for bad key and bad cert.
    Test of STARTTLS functionality.
    Test of RAND_* functions.
  * Fixes for threading/malloc bug.
  * Issue 1065 fixed:
    sslsocket class renamed to SSLSocket.
    sslerror class renamed to SSLError.
    Function "wrap_socket" now used to wrap an existing socket.
  * Issue 1583946 finally fixed:
    Support for subjectAltName added.
    Subject name now returned as proper DN list of RDNs.
  * SSLError exported from socket as "sslerror".
  * RAND_* functions properly exported from ssl.py.
  * Documentation improved:
    Example of how to create a self-signed certificate.
    Better indexing.
........
  r58098 | guido.van.rossum | 2007-09-11 00:02:25 +0200 (Tue, 11 Sep 2007) | 9 lines
  Patch # 1140 (my code, approved by Effbot).
  Make sure the type of the return value of re.sub(x, y, z) is the type
  of y+x (i.e. unicode if either is unicode, str if they are both str)
  even if there are no substitutions or if x==z (which triggered various
  special cases in join_list()).
  Could be backported to 2.5; no need to port to 3.0.
........
  r58099 | guido.van.rossum | 2007-09-11 00:36:02 +0200 (Tue, 11 Sep 2007) | 8 lines
  Patch # 1026 by Benjamin Aranguren (with Alex Martelli):
  Backport abc.py and isinstance/issubclass overloading to 2.6.
  I had to backport test_typechecks.py myself, and make one small change
  to abc.py to avoid duplicate work when x.__class__ and type(x) are the
  same.
........
  r58100 | bill.janssen | 2007-09-11 01:41:24 +0200 (Tue, 11 Sep 2007) | 3 lines
  A better way of finding an open port to test with.
........
  r58101 | bill.janssen | 2007-09-11 03:09:19 +0200 (Tue, 11 Sep 2007) | 4 lines
  Make sure test_ssl doesn't reference the ssl module in a
  context where it can't be imported.
........
  r58102 | bill.janssen | 2007-09-11 04:42:07 +0200 (Tue, 11 Sep 2007) | 3 lines
  Fix some documentation bugs.
........
  r58103 | nick.coghlan | 2007-09-11 16:01:18 +0200 (Tue, 11 Sep 2007) | 1 line
  Always use the -E flag when spawning subprocesses in test_cmd_line (Issue 1056)
........
  r58106 | thomas.heller | 2007-09-11 21:17:48 +0200 (Tue, 11 Sep 2007) | 3 lines
  Disable some tests that fail on the 'ppc Debian unstable' buildbot to
  find out if they cause the segfault on the 'alpha Debian' machine.
........
  r58108 | brett.cannon | 2007-09-11 23:02:28 +0200 (Tue, 11 Sep 2007) | 6 lines
  Generators had their throw() method allowing string exceptions.  That's a
  no-no.
  Fixes issue #1147.  Need to fix 2.5 to raise a proper warning if a string
  exception is passed in.
........
  r58112 | georg.brandl | 2007-09-12 20:03:51 +0200 (Wed, 12 Sep 2007) | 3 lines
  New documentation page for the bdb module.
  (This doesn't need to be merged to Py3k.)
........
  r58114 | georg.brandl | 2007-09-12 20:05:57 +0200 (Wed, 12 Sep 2007) | 2 lines
  Bug #1152: use non-deprecated name in example.
........
  r58115 | georg.brandl | 2007-09-12 20:08:33 +0200 (Wed, 12 Sep 2007) | 2 lines
  Fix #1122: wrong return type documented for various _Size() functions.
........
  r58117 | georg.brandl | 2007-09-12 20:10:56 +0200 (Wed, 12 Sep 2007) | 2 lines
  Fix #1139: PyFile_Encoding really is PyFile_SetEncoding.
........
  r58119 | georg.brandl | 2007-09-12 20:29:18 +0200 (Wed, 12 Sep 2007) | 2 lines
  bug #1154: release memory allocated by "es" PyArg_ParseTuple format specifier.
........
  r58121 | bill.janssen | 2007-09-12 20:52:05 +0200 (Wed, 12 Sep 2007) | 1 line
  root certificate for https://svn.python.org/, used in test_ssl
........
  r58122 | georg.brandl | 2007-09-12 21:00:07 +0200 (Wed, 12 Sep 2007) | 3 lines
  Bug #1153: repr.repr() now doesn't require set and dictionary items
  to be orderable to properly represent them.
........
  r58125 | georg.brandl | 2007-09-12 21:29:28 +0200 (Wed, 12 Sep 2007) | 4 lines
  #1120: put explicit version in the shebang lines of pydoc, idle
  and smtpd.py scripts that are installed by setup.py. That way, they
  work when only "make altinstall" is used.
........
  r58139 | mark.summerfield | 2007-09-13 16:54:30 +0200 (Thu, 13 Sep 2007) | 9 lines
  Replaced variable o with obj in operator.rst because o is easy to
  confuse.
  Added a note about Python 3's collections.Mapping etc., above section
  that describes isMappingType() etc.
  Added xrefs between os, os.path, fileinput, and open().
........
  r58143 | facundo.batista | 2007-09-13 20:13:15 +0200 (Thu, 13 Sep 2007) | 7 lines
  Merged the decimal-branch (revisions 54886 to 58140). Decimal is now
  fully updated to the latests Decimal Specification (v1.66) and the
  latests test cases (v2.56).
  Thanks to Mark Dickinson for all his help during this process.
........
  r58145 | facundo.batista | 2007-09-13 20:42:09 +0200 (Thu, 13 Sep 2007) | 7 lines
  Put the parameter watchexp back in (changed watchexp from an int
  to a bool).  Also second argument to watchexp is now converted
  to Decimal, just as with all the other two-argument operations.
  Thanks Mark Dickinson.
........
  r58147 | andrew.kuchling | 2007-09-14 00:49:34 +0200 (Fri, 14 Sep 2007) | 1 line
  Add various items
........
  r58148 | andrew.kuchling | 2007-09-14 00:50:10 +0200 (Fri, 14 Sep 2007) | 1 line
  Make target unique
........
  r58154 | facundo.batista | 2007-09-14 20:58:34 +0200 (Fri, 14 Sep 2007) | 3 lines
  Included the new functions, and new descriptions.
........
  r58155 | thomas.heller | 2007-09-14 21:40:35 +0200 (Fri, 14 Sep 2007) | 2 lines
  ctypes.util.find_library uses dump(1) instead of objdump(1) on Solaris.
  Fixes issue #1777530; will backport to release25-maint.
........
  r58159 | facundo.batista | 2007-09-14 23:29:52 +0200 (Fri, 14 Sep 2007) | 3 lines
  Some additions (examples and a bit on the tutorial).
........
  r58160 | georg.brandl | 2007-09-15 18:53:36 +0200 (Sat, 15 Sep 2007) | 2 lines
  Remove bdb from the "undocumented modules" list.
........
  r58164 | bill.janssen | 2007-09-17 00:06:00 +0200 (Mon, 17 Sep 2007) | 15 lines
  Add support for asyncore server-side SSL support.  This requires
  adding the 'makefile' method to ssl.SSLSocket, and importing the
  requisite fakefile class from socket.py, and making the appropriate
  changes to it to make it use the SSL connection.
  Added sample HTTPS server to test_ssl.py, and test that uses it.
  Change SSL tests to use https://svn.python.org/, instead of
  www.sf.net and pop.gmail.com.
  Added utility function to ssl module, get_server_certificate,
  to wrap up the several things to be done to pull a certificate
  from a remote server.
........
  r58173 | bill.janssen | 2007-09-17 01:16:46 +0200 (Mon, 17 Sep 2007) | 1 line
  use binary mode when reading files for testAsyncore to make Windows happy
........
  r58175 | raymond.hettinger | 2007-09-17 02:55:00 +0200 (Mon, 17 Sep 2007) | 7 lines
  Sync-up named tuples with the latest version of the ASPN recipe.
  Allows optional commas in the field-name spec (help when named tuples are used in conjuction with sql queries).
  Adds the __fields__ attribute for introspection and to support conversion to dictionary form.
  Adds a  __replace__() method similar to str.replace() but using a named field as a target.
  Clean-up spelling and presentation in doc-strings.
........
  r58176 | brett.cannon | 2007-09-17 05:28:34 +0200 (Mon, 17 Sep 2007) | 5 lines
  Add a bunch of GIL release/acquire points in tp_print implementations and for
  PyObject_Print().
  Closes issue #1164.
........
  r58177 | sean.reifschneider | 2007-09-17 07:45:04 +0200 (Mon, 17 Sep 2007) | 2 lines
  issue1597011: Fix for bz2 module corner-case error due to error checking bug.
........
  r58180 | facundo.batista | 2007-09-17 18:26:50 +0200 (Mon, 17 Sep 2007) | 3 lines
  Decimal is updated, :)
........
  r58181 | facundo.batista | 2007-09-17 19:30:13 +0200 (Mon, 17 Sep 2007) | 5 lines
  The methods always return Decimal classes, even if they're
  executed through a subclass (thanks Mark Dickinson).
  Added a bit of testing for this.
........
  r58183 | sean.reifschneider | 2007-09-17 22:53:21 +0200 (Mon, 17 Sep 2007) | 2 lines
  issue1082: Fixing platform and system for Vista.
........
  r58185 | andrew.kuchling | 2007-09-18 03:36:16 +0200 (Tue, 18 Sep 2007) | 1 line
  Add item; sort properly
........
  r58186 | raymond.hettinger | 2007-09-18 05:33:19 +0200 (Tue, 18 Sep 2007) | 1 line
  Handle corner cased on 0-tuples and 1-tuples.  Add verbose option so people can see how it works.
........
  r58192 | georg.brandl | 2007-09-18 09:24:40 +0200 (Tue, 18 Sep 2007) | 2 lines
  A bit of reordering, also show more subheadings in the lang ref index.
........
  r58193 | facundo.batista | 2007-09-18 18:53:18 +0200 (Tue, 18 Sep 2007) | 4 lines
  Speed up of the various division operations (remainder, divide,
  divideint and divmod). Thanks Mark Dickinson.
........
  r58197 | raymond.hettinger | 2007-09-19 00:18:02 +0200 (Wed, 19 Sep 2007) | 1 line
  Cleanup docs for NamedTuple.
........
											
										 
											2007-09-19 03:06:30 +00:00
										 |  |  | 			Py_BEGIN_ALLOW_THREADS | 
					
						
							| 
									
										
										
										
											2006-03-01 05:41:20 +00:00
										 |  |  | 			fprintf(fp, "<refcnt %ld at %p>", | 
					
						
							|  |  |  | 				(long)op->ob_refcnt, op); | 
					
						
							| 
									
										
											  
											
												Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r58096 | brett.cannon | 2007-09-10 23:38:27 +0200 (Mon, 10 Sep 2007) | 4 lines
  Fix a possible segfault from recursing too deep to get the repr of a list.
  Closes issue #1096.
........
  r58097 | bill.janssen | 2007-09-10 23:51:02 +0200 (Mon, 10 Sep 2007) | 33 lines
  More work on SSL support.
  * Much expanded test suite:
    All protocols tested against all other protocols.
    All protocols tested with all certificate options.
    Tests for bad key and bad cert.
    Test of STARTTLS functionality.
    Test of RAND_* functions.
  * Fixes for threading/malloc bug.
  * Issue 1065 fixed:
    sslsocket class renamed to SSLSocket.
    sslerror class renamed to SSLError.
    Function "wrap_socket" now used to wrap an existing socket.
  * Issue 1583946 finally fixed:
    Support for subjectAltName added.
    Subject name now returned as proper DN list of RDNs.
  * SSLError exported from socket as "sslerror".
  * RAND_* functions properly exported from ssl.py.
  * Documentation improved:
    Example of how to create a self-signed certificate.
    Better indexing.
........
  r58098 | guido.van.rossum | 2007-09-11 00:02:25 +0200 (Tue, 11 Sep 2007) | 9 lines
  Patch # 1140 (my code, approved by Effbot).
  Make sure the type of the return value of re.sub(x, y, z) is the type
  of y+x (i.e. unicode if either is unicode, str if they are both str)
  even if there are no substitutions or if x==z (which triggered various
  special cases in join_list()).
  Could be backported to 2.5; no need to port to 3.0.
........
  r58099 | guido.van.rossum | 2007-09-11 00:36:02 +0200 (Tue, 11 Sep 2007) | 8 lines
  Patch # 1026 by Benjamin Aranguren (with Alex Martelli):
  Backport abc.py and isinstance/issubclass overloading to 2.6.
  I had to backport test_typechecks.py myself, and make one small change
  to abc.py to avoid duplicate work when x.__class__ and type(x) are the
  same.
........
  r58100 | bill.janssen | 2007-09-11 01:41:24 +0200 (Tue, 11 Sep 2007) | 3 lines
  A better way of finding an open port to test with.
........
  r58101 | bill.janssen | 2007-09-11 03:09:19 +0200 (Tue, 11 Sep 2007) | 4 lines
  Make sure test_ssl doesn't reference the ssl module in a
  context where it can't be imported.
........
  r58102 | bill.janssen | 2007-09-11 04:42:07 +0200 (Tue, 11 Sep 2007) | 3 lines
  Fix some documentation bugs.
........
  r58103 | nick.coghlan | 2007-09-11 16:01:18 +0200 (Tue, 11 Sep 2007) | 1 line
  Always use the -E flag when spawning subprocesses in test_cmd_line (Issue 1056)
........
  r58106 | thomas.heller | 2007-09-11 21:17:48 +0200 (Tue, 11 Sep 2007) | 3 lines
  Disable some tests that fail on the 'ppc Debian unstable' buildbot to
  find out if they cause the segfault on the 'alpha Debian' machine.
........
  r58108 | brett.cannon | 2007-09-11 23:02:28 +0200 (Tue, 11 Sep 2007) | 6 lines
  Generators had their throw() method allowing string exceptions.  That's a
  no-no.
  Fixes issue #1147.  Need to fix 2.5 to raise a proper warning if a string
  exception is passed in.
........
  r58112 | georg.brandl | 2007-09-12 20:03:51 +0200 (Wed, 12 Sep 2007) | 3 lines
  New documentation page for the bdb module.
  (This doesn't need to be merged to Py3k.)
........
  r58114 | georg.brandl | 2007-09-12 20:05:57 +0200 (Wed, 12 Sep 2007) | 2 lines
  Bug #1152: use non-deprecated name in example.
........
  r58115 | georg.brandl | 2007-09-12 20:08:33 +0200 (Wed, 12 Sep 2007) | 2 lines
  Fix #1122: wrong return type documented for various _Size() functions.
........
  r58117 | georg.brandl | 2007-09-12 20:10:56 +0200 (Wed, 12 Sep 2007) | 2 lines
  Fix #1139: PyFile_Encoding really is PyFile_SetEncoding.
........
  r58119 | georg.brandl | 2007-09-12 20:29:18 +0200 (Wed, 12 Sep 2007) | 2 lines
  bug #1154: release memory allocated by "es" PyArg_ParseTuple format specifier.
........
  r58121 | bill.janssen | 2007-09-12 20:52:05 +0200 (Wed, 12 Sep 2007) | 1 line
  root certificate for https://svn.python.org/, used in test_ssl
........
  r58122 | georg.brandl | 2007-09-12 21:00:07 +0200 (Wed, 12 Sep 2007) | 3 lines
  Bug #1153: repr.repr() now doesn't require set and dictionary items
  to be orderable to properly represent them.
........
  r58125 | georg.brandl | 2007-09-12 21:29:28 +0200 (Wed, 12 Sep 2007) | 4 lines
  #1120: put explicit version in the shebang lines of pydoc, idle
  and smtpd.py scripts that are installed by setup.py. That way, they
  work when only "make altinstall" is used.
........
  r58139 | mark.summerfield | 2007-09-13 16:54:30 +0200 (Thu, 13 Sep 2007) | 9 lines
  Replaced variable o with obj in operator.rst because o is easy to
  confuse.
  Added a note about Python 3's collections.Mapping etc., above section
  that describes isMappingType() etc.
  Added xrefs between os, os.path, fileinput, and open().
........
  r58143 | facundo.batista | 2007-09-13 20:13:15 +0200 (Thu, 13 Sep 2007) | 7 lines
  Merged the decimal-branch (revisions 54886 to 58140). Decimal is now
  fully updated to the latests Decimal Specification (v1.66) and the
  latests test cases (v2.56).
  Thanks to Mark Dickinson for all his help during this process.
........
  r58145 | facundo.batista | 2007-09-13 20:42:09 +0200 (Thu, 13 Sep 2007) | 7 lines
  Put the parameter watchexp back in (changed watchexp from an int
  to a bool).  Also second argument to watchexp is now converted
  to Decimal, just as with all the other two-argument operations.
  Thanks Mark Dickinson.
........
  r58147 | andrew.kuchling | 2007-09-14 00:49:34 +0200 (Fri, 14 Sep 2007) | 1 line
  Add various items
........
  r58148 | andrew.kuchling | 2007-09-14 00:50:10 +0200 (Fri, 14 Sep 2007) | 1 line
  Make target unique
........
  r58154 | facundo.batista | 2007-09-14 20:58:34 +0200 (Fri, 14 Sep 2007) | 3 lines
  Included the new functions, and new descriptions.
........
  r58155 | thomas.heller | 2007-09-14 21:40:35 +0200 (Fri, 14 Sep 2007) | 2 lines
  ctypes.util.find_library uses dump(1) instead of objdump(1) on Solaris.
  Fixes issue #1777530; will backport to release25-maint.
........
  r58159 | facundo.batista | 2007-09-14 23:29:52 +0200 (Fri, 14 Sep 2007) | 3 lines
  Some additions (examples and a bit on the tutorial).
........
  r58160 | georg.brandl | 2007-09-15 18:53:36 +0200 (Sat, 15 Sep 2007) | 2 lines
  Remove bdb from the "undocumented modules" list.
........
  r58164 | bill.janssen | 2007-09-17 00:06:00 +0200 (Mon, 17 Sep 2007) | 15 lines
  Add support for asyncore server-side SSL support.  This requires
  adding the 'makefile' method to ssl.SSLSocket, and importing the
  requisite fakefile class from socket.py, and making the appropriate
  changes to it to make it use the SSL connection.
  Added sample HTTPS server to test_ssl.py, and test that uses it.
  Change SSL tests to use https://svn.python.org/, instead of
  www.sf.net and pop.gmail.com.
  Added utility function to ssl module, get_server_certificate,
  to wrap up the several things to be done to pull a certificate
  from a remote server.
........
  r58173 | bill.janssen | 2007-09-17 01:16:46 +0200 (Mon, 17 Sep 2007) | 1 line
  use binary mode when reading files for testAsyncore to make Windows happy
........
  r58175 | raymond.hettinger | 2007-09-17 02:55:00 +0200 (Mon, 17 Sep 2007) | 7 lines
  Sync-up named tuples with the latest version of the ASPN recipe.
  Allows optional commas in the field-name spec (help when named tuples are used in conjuction with sql queries).
  Adds the __fields__ attribute for introspection and to support conversion to dictionary form.
  Adds a  __replace__() method similar to str.replace() but using a named field as a target.
  Clean-up spelling and presentation in doc-strings.
........
  r58176 | brett.cannon | 2007-09-17 05:28:34 +0200 (Mon, 17 Sep 2007) | 5 lines
  Add a bunch of GIL release/acquire points in tp_print implementations and for
  PyObject_Print().
  Closes issue #1164.
........
  r58177 | sean.reifschneider | 2007-09-17 07:45:04 +0200 (Mon, 17 Sep 2007) | 2 lines
  issue1597011: Fix for bz2 module corner-case error due to error checking bug.
........
  r58180 | facundo.batista | 2007-09-17 18:26:50 +0200 (Mon, 17 Sep 2007) | 3 lines
  Decimal is updated, :)
........
  r58181 | facundo.batista | 2007-09-17 19:30:13 +0200 (Mon, 17 Sep 2007) | 5 lines
  The methods always return Decimal classes, even if they're
  executed through a subclass (thanks Mark Dickinson).
  Added a bit of testing for this.
........
  r58183 | sean.reifschneider | 2007-09-17 22:53:21 +0200 (Mon, 17 Sep 2007) | 2 lines
  issue1082: Fixing platform and system for Vista.
........
  r58185 | andrew.kuchling | 2007-09-18 03:36:16 +0200 (Tue, 18 Sep 2007) | 1 line
  Add item; sort properly
........
  r58186 | raymond.hettinger | 2007-09-18 05:33:19 +0200 (Tue, 18 Sep 2007) | 1 line
  Handle corner cased on 0-tuples and 1-tuples.  Add verbose option so people can see how it works.
........
  r58192 | georg.brandl | 2007-09-18 09:24:40 +0200 (Tue, 18 Sep 2007) | 2 lines
  A bit of reordering, also show more subheadings in the lang ref index.
........
  r58193 | facundo.batista | 2007-09-18 18:53:18 +0200 (Tue, 18 Sep 2007) | 4 lines
  Speed up of the various division operations (remainder, divide,
  divideint and divmod). Thanks Mark Dickinson.
........
  r58197 | raymond.hettinger | 2007-09-19 00:18:02 +0200 (Wed, 19 Sep 2007) | 1 line
  Cleanup docs for NamedTuple.
........
											
										 
											2007-09-19 03:06:30 +00:00
										 |  |  | 			Py_END_ALLOW_THREADS | 
					
						
							| 
									
										
										
										
											2007-08-07 19:51:00 +00:00
										 |  |  | 		else { | 
					
						
							| 
									
										
										
										
											2001-05-01 16:53:37 +00:00
										 |  |  | 			PyObject *s; | 
					
						
							|  |  |  | 			if (flags & Py_PRINT_RAW) | 
					
						
							|  |  |  | 				s = PyObject_Str(op); | 
					
						
							|  |  |  | 			else | 
					
						
							| 
									
										
										
										
											2007-08-09 20:47:59 +00:00
										 |  |  | 				s = PyObject_Repr(op); | 
					
						
							| 
									
										
										
										
											2001-05-01 16:53:37 +00:00
										 |  |  | 			if (s == NULL) | 
					
						
							|  |  |  | 				ret = -1; | 
					
						
							| 
									
										
										
										
											2008-05-26 13:28:38 +00:00
										 |  |  |                         else if (PyBytes_Check(s)) { | 
					
						
							|  |  |  | 				fwrite(PyBytes_AS_STRING(s), 1, | 
					
						
							|  |  |  | 				       PyBytes_GET_SIZE(s), fp); | 
					
						
							| 
									
										
										
										
											2007-08-09 20:47:59 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			else if (PyUnicode_Check(s)) { | 
					
						
							|  |  |  | 				PyObject *t; | 
					
						
							|  |  |  | 				t = _PyUnicode_AsDefaultEncodedString(s, NULL); | 
					
						
							|  |  |  | 				if (t == NULL) | 
					
						
							|  |  |  | 					ret = 0; | 
					
						
							|  |  |  | 				else { | 
					
						
							| 
									
										
										
										
											2008-05-26 13:28:38 +00:00
										 |  |  | 					fwrite(PyBytes_AS_STRING(t), 1, | 
					
						
							|  |  |  | 					       PyBytes_GET_SIZE(t), fp); | 
					
						
							| 
									
										
										
										
											2007-08-09 20:47:59 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											1992-09-03 20:32:55 +00:00
										 |  |  | 			else { | 
					
						
							| 
									
										
										
										
											2007-08-09 20:47:59 +00:00
										 |  |  | 				PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 					     "str() or repr() returned '%.100s'", | 
					
						
							|  |  |  | 					     s->ob_type->tp_name); | 
					
						
							|  |  |  | 				ret = -1; | 
					
						
							| 
									
										
										
										
											1992-09-03 20:32:55 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2001-05-01 16:53:37 +00:00
										 |  |  | 			Py_XDECREF(s); | 
					
						
							| 
									
										
										
										
											1992-09-03 20:32:55 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1991-06-07 16:10:43 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											1991-07-27 21:40:24 +00:00
										 |  |  | 	if (ret == 0) { | 
					
						
							|  |  |  | 		if (ferror(fp)) { | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 			PyErr_SetFromErrno(PyExc_IOError); | 
					
						
							| 
									
										
										
										
											1991-07-27 21:40:24 +00:00
										 |  |  | 			clearerr(fp); | 
					
						
							|  |  |  | 			ret = -1; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return ret; | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-13 20:13:12 +00:00
										 |  |  | int | 
					
						
							|  |  |  | PyObject_Print(PyObject *op, FILE *fp, int flags) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return internal_print(op, fp, flags, 0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-21 23:36:26 +00:00
										 |  |  | /* For debugging convenience.  Set a breakpoint here and call it from your DLL */ | 
					
						
							|  |  |  | void | 
					
						
							| 
									
										
											  
											
												Merged revisions 53451-53537 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r53454 | brett.cannon | 2007-01-15 20:12:08 +0100 (Mon, 15 Jan 2007) | 3 lines
  Add a note for strptime that just because strftime supports some extra
  directive that is not documented that strptime will as well.
........
  r53458 | vinay.sajip | 2007-01-16 10:50:07 +0100 (Tue, 16 Jan 2007) | 1 line
  Updated rotating file handlers to use _open().
........
  r53459 | marc-andre.lemburg | 2007-01-16 14:03:06 +0100 (Tue, 16 Jan 2007) | 2 lines
  Add news items for the recent pybench and platform changes.
........
  r53460 | sjoerd.mullender | 2007-01-16 17:42:38 +0100 (Tue, 16 Jan 2007) | 4 lines
  Fixed ntpath.expandvars to not replace references to non-existing
  variables with nothing.  Also added tests.
  This fixes bug #494589.
........
  r53464 | neal.norwitz | 2007-01-17 07:23:51 +0100 (Wed, 17 Jan 2007) | 1 line
  Give Calvin Spealman access for python-dev summaries.
........
  r53465 | neal.norwitz | 2007-01-17 09:37:26 +0100 (Wed, 17 Jan 2007) | 1 line
  Remove Calvin since he only has access to the website currently.
........
  r53466 | thomas.heller | 2007-01-17 10:40:34 +0100 (Wed, 17 Jan 2007) | 2 lines
  Replace C++ comments with C comments.
........
  r53472 | andrew.kuchling | 2007-01-17 20:55:06 +0100 (Wed, 17 Jan 2007) | 1 line
  [Part of bug #1599254] Add suggestion to Mailbox docs to use Maildir, and warn user to lock/unlock mailboxes when modifying them
........
  r53475 | georg.brandl | 2007-01-17 22:09:04 +0100 (Wed, 17 Jan 2007) | 2 lines
  Bug #1637967: missing //= operator in list.
........
  r53477 | georg.brandl | 2007-01-17 22:19:58 +0100 (Wed, 17 Jan 2007) | 2 lines
  Bug #1629125: fix wrong data type (int -> Py_ssize_t) in PyDict_Next docs.
........
  r53481 | neal.norwitz | 2007-01-18 06:40:58 +0100 (Thu, 18 Jan 2007) | 1 line
  Try reverting part of r53145 that seems to cause the Windows buildbots to fail in test_uu.UUFileTest.test_encode
........
  r53482 | fred.drake | 2007-01-18 06:42:30 +0100 (Thu, 18 Jan 2007) | 1 line
  add missing version entry
........
  r53483 | neal.norwitz | 2007-01-18 07:20:55 +0100 (Thu, 18 Jan 2007) | 7 lines
  This test doesn't pass on Windows.  The cause seems to be that chmod
  doesn't support the same funcationality as on Unix.  I'm not sure if
  this fix is the best (or if it will even work)--it's a test to see
  if the buildbots start passing again.
  It might be better to not even run this test if it's windows (or non-posix).
........
  r53488 | neal.norwitz | 2007-01-19 06:53:33 +0100 (Fri, 19 Jan 2007) | 1 line
  SF #1635217, Fix unbalanced paren
........
  r53489 | martin.v.loewis | 2007-01-19 07:42:22 +0100 (Fri, 19 Jan 2007) | 3 lines
  Prefix AST symbols with _Py_. Fixes #1637022.
  Will backport.
........
  r53497 | martin.v.loewis | 2007-01-19 19:01:38 +0100 (Fri, 19 Jan 2007) | 2 lines
  Add UUIDs for 2.5.1 and 2.5.2
........
  r53499 | raymond.hettinger | 2007-01-19 19:07:18 +0100 (Fri, 19 Jan 2007) | 1 line
  SF# 1635892:  Fix docs for betavariate's input parameters .
........
  r53503 | martin.v.loewis | 2007-01-20 15:05:39 +0100 (Sat, 20 Jan 2007) | 2 lines
  Merge 53501 and 53502 from 25 branch:
  Add /GS- for AMD64 and Itanium builds where missing.
........
  r53504 | walter.doerwald | 2007-01-20 18:28:31 +0100 (Sat, 20 Jan 2007) | 2 lines
  Port test_resource.py to unittest.
........
  r53505 | walter.doerwald | 2007-01-20 19:19:33 +0100 (Sat, 20 Jan 2007) | 2 lines
  Add argument tests an calls of resource.getrusage().
........
  r53506 | walter.doerwald | 2007-01-20 20:03:17 +0100 (Sat, 20 Jan 2007) | 2 lines
  resource.RUSAGE_BOTH might not exist.
........
  r53507 | walter.doerwald | 2007-01-21 00:07:28 +0100 (Sun, 21 Jan 2007) | 2 lines
  Port test_new.py to unittest.
........
  r53508 | martin.v.loewis | 2007-01-21 10:33:07 +0100 (Sun, 21 Jan 2007) | 2 lines
  Patch #1610575: Add support for _Bool to struct.
........
  r53509 | georg.brandl | 2007-01-21 11:28:43 +0100 (Sun, 21 Jan 2007) | 3 lines
  Bug #1486663: don't reject keyword arguments for subclasses of builtin
  types.
........
  r53511 | georg.brandl | 2007-01-21 11:35:10 +0100 (Sun, 21 Jan 2007) | 2 lines
  Patch #1627441: close sockets properly in urllib2.
........
  r53517 | georg.brandl | 2007-01-22 20:40:21 +0100 (Mon, 22 Jan 2007) | 3 lines
  Use new email module names (#1637162, #1637159, #1637157).
........
  r53518 | andrew.kuchling | 2007-01-22 21:26:40 +0100 (Mon, 22 Jan 2007) | 1 line
  Improve pattern used for mbox 'From' lines; add a simple test
........
  r53519 | andrew.kuchling | 2007-01-22 21:27:50 +0100 (Mon, 22 Jan 2007) | 1 line
  Make comment match the code
........
  r53522 | georg.brandl | 2007-01-22 22:10:33 +0100 (Mon, 22 Jan 2007) | 2 lines
  Bug #1249573: fix rfc822.parsedate not accepting a certain date format
........
  r53524 | georg.brandl | 2007-01-22 22:23:41 +0100 (Mon, 22 Jan 2007) | 2 lines
  Bug #1627316: handle error in condition/ignore pdb commands more gracefully.
........
  r53526 | lars.gustaebel | 2007-01-23 12:17:33 +0100 (Tue, 23 Jan 2007) | 4 lines
  Patch #1507247: tarfile.py: use current umask for intermediate
  directories.
........
  r53527 | thomas.wouters | 2007-01-23 14:42:00 +0100 (Tue, 23 Jan 2007) | 13 lines
  SF patch #1630975: Fix crash when replacing sys.stdout in sitecustomize
  When running the interpreter in an environment that would cause it to set
  stdout/stderr/stdin's encoding, having a sitecustomize that would replace
  them with something other than PyFile objects would crash the interpreter.
  Fix it by simply ignoring the encoding-setting for non-files.
  This could do with a test, but I can think of no maintainable and portable
  way to test this bug, short of adding a sitecustomize.py to the buildsystem
  and have it always run with it (hmmm....)
........
  r53528 | thomas.wouters | 2007-01-23 14:50:49 +0100 (Tue, 23 Jan 2007) | 4 lines
  Add news entry about last checkin (oops.)
........
  r53531 | martin.v.loewis | 2007-01-23 22:11:47 +0100 (Tue, 23 Jan 2007) | 4 lines
  Make PyTraceBack_Here use the current thread, not the
  frame's thread state. Fixes #1579370.
  Will backport.
........
  r53535 | brett.cannon | 2007-01-24 00:21:22 +0100 (Wed, 24 Jan 2007) | 5 lines
  Fix crasher for when an object's __del__ creates a new weakref to itself.
  Patch only fixes new-style classes; classic classes still buggy.
  Closes bug #1377858.  Already backported.
........
  r53536 | walter.doerwald | 2007-01-24 01:42:19 +0100 (Wed, 24 Jan 2007) | 2 lines
  Port test_popen.py to unittest.
........
											
										 
											2007-02-01 18:02:27 +00:00
										 |  |  | _Py_BreakPoint(void) | 
					
						
							| 
									
										
										
										
											2006-08-21 23:36:26 +00:00
										 |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-13 20:13:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-23 16:24:35 +00:00
										 |  |  | /* For debugging convenience.  See Misc/gdbinit for some useful gdb hooks */ | 
					
						
							| 
									
										
										
										
											2006-08-21 23:36:26 +00:00
										 |  |  | void | 
					
						
							|  |  |  | _PyObject_Dump(PyObject* op) | 
					
						
							| 
									
										
										
										
											2001-01-23 16:24:35 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2001-02-22 22:39:18 +00:00
										 |  |  | 	if (op == NULL) | 
					
						
							|  |  |  | 		fprintf(stderr, "NULL\n"); | 
					
						
							|  |  |  | 	else { | 
					
						
							| 
									
										
										
										
											2009-04-05 11:47:34 +00:00
										 |  |  | #ifdef WITH_THREAD
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 67654,67676-67677,67681,67692,67725,67761,67784-67785,67787-67788,67802,67848-67850,67862-67864,67880,67882 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r67654 | georg.brandl | 2008-12-07 16:42:09 -0600 (Sun, 07 Dec 2008) | 2 lines
  #4457: rewrite __import__() documentation.
........
  r67676 | benjamin.peterson | 2008-12-08 20:03:03 -0600 (Mon, 08 Dec 2008) | 1 line
  specify how things are copied
........
  r67677 | benjamin.peterson | 2008-12-08 20:05:11 -0600 (Mon, 08 Dec 2008) | 1 line
  revert unrelated change to installer script
........
  r67681 | jeremy.hylton | 2008-12-09 15:03:10 -0600 (Tue, 09 Dec 2008) | 2 lines
  Add simple unittests for Request
........
  r67692 | amaury.forgeotdarc | 2008-12-10 18:03:42 -0600 (Wed, 10 Dec 2008) | 2 lines
  #1030250: correctly pass the dry_run option to the mkpath() function.
........
  r67725 | benjamin.peterson | 2008-12-12 22:02:20 -0600 (Fri, 12 Dec 2008) | 1 line
  fix incorrect example
........
  r67761 | benjamin.peterson | 2008-12-14 11:26:04 -0600 (Sun, 14 Dec 2008) | 1 line
  fix missing bracket
........
  r67784 | georg.brandl | 2008-12-15 02:33:58 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4446: document "platforms" argument for setup().
........
  r67785 | georg.brandl | 2008-12-15 02:36:11 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4611: fix typo.
........
  r67787 | georg.brandl | 2008-12-15 02:58:59 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4578: fix has_key() usage in compiler package.
........
  r67788 | georg.brandl | 2008-12-15 03:07:39 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4568: remove limitation in varargs callback example.
........
  r67802 | amaury.forgeotdarc | 2008-12-15 16:29:14 -0600 (Mon, 15 Dec 2008) | 4 lines
  #3632: the "pyo" macro from gdbinit can now run when the GIL is released.
  Patch by haypo.
........
  r67848 | benjamin.peterson | 2008-12-18 20:28:56 -0600 (Thu, 18 Dec 2008) | 1 line
  fix typo
........
  r67849 | benjamin.peterson | 2008-12-18 20:31:35 -0600 (Thu, 18 Dec 2008) | 1 line
  _call_method -> _callmethod and _get_value to _getvalue
........
  r67850 | raymond.hettinger | 2008-12-19 03:06:07 -0600 (Fri, 19 Dec 2008) | 9 lines
  Fix-up and clean-up docs for int.bit_length().
  * Replace dramatic footnote with in-line comment about possible round-off errors in logarithms of large numbers.
  * Add comments to the pure python code equivalent.
  * replace floor() with int() in the mathematical equivalent so the type is correct (should be an int, not a float).
  * add abs() to the mathematical equivalent so that it matches the previous line that it is supposed to be equivalent to.
  * make one combined example with a negative input.
........
  r67862 | benjamin.peterson | 2008-12-19 20:48:02 -0600 (Fri, 19 Dec 2008) | 1 line
  copy sentence from docstring
........
  r67863 | benjamin.peterson | 2008-12-19 20:51:26 -0600 (Fri, 19 Dec 2008) | 1 line
  add headings
........
  r67864 | benjamin.peterson | 2008-12-19 20:57:19 -0600 (Fri, 19 Dec 2008) | 1 line
  beef up docstring
........
  r67880 | benjamin.peterson | 2008-12-20 16:49:24 -0600 (Sat, 20 Dec 2008) | 1 line
  remove redundant sentence
........
  r67882 | benjamin.peterson | 2008-12-20 16:59:49 -0600 (Sat, 20 Dec 2008) | 1 line
  add some recent releases to the list
........
											
										 
											2008-12-21 00:06:59 +00:00
										 |  |  | 		PyGILState_STATE gil; | 
					
						
							| 
									
										
										
										
											2009-04-05 11:47:34 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-09-14 15:50:08 +00:00
										 |  |  | 		fprintf(stderr, "object  : "); | 
					
						
							| 
									
										
										
										
											2009-04-05 11:47:34 +00:00
										 |  |  | #ifdef WITH_THREAD
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 67654,67676-67677,67681,67692,67725,67761,67784-67785,67787-67788,67802,67848-67850,67862-67864,67880,67882 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r67654 | georg.brandl | 2008-12-07 16:42:09 -0600 (Sun, 07 Dec 2008) | 2 lines
  #4457: rewrite __import__() documentation.
........
  r67676 | benjamin.peterson | 2008-12-08 20:03:03 -0600 (Mon, 08 Dec 2008) | 1 line
  specify how things are copied
........
  r67677 | benjamin.peterson | 2008-12-08 20:05:11 -0600 (Mon, 08 Dec 2008) | 1 line
  revert unrelated change to installer script
........
  r67681 | jeremy.hylton | 2008-12-09 15:03:10 -0600 (Tue, 09 Dec 2008) | 2 lines
  Add simple unittests for Request
........
  r67692 | amaury.forgeotdarc | 2008-12-10 18:03:42 -0600 (Wed, 10 Dec 2008) | 2 lines
  #1030250: correctly pass the dry_run option to the mkpath() function.
........
  r67725 | benjamin.peterson | 2008-12-12 22:02:20 -0600 (Fri, 12 Dec 2008) | 1 line
  fix incorrect example
........
  r67761 | benjamin.peterson | 2008-12-14 11:26:04 -0600 (Sun, 14 Dec 2008) | 1 line
  fix missing bracket
........
  r67784 | georg.brandl | 2008-12-15 02:33:58 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4446: document "platforms" argument for setup().
........
  r67785 | georg.brandl | 2008-12-15 02:36:11 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4611: fix typo.
........
  r67787 | georg.brandl | 2008-12-15 02:58:59 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4578: fix has_key() usage in compiler package.
........
  r67788 | georg.brandl | 2008-12-15 03:07:39 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4568: remove limitation in varargs callback example.
........
  r67802 | amaury.forgeotdarc | 2008-12-15 16:29:14 -0600 (Mon, 15 Dec 2008) | 4 lines
  #3632: the "pyo" macro from gdbinit can now run when the GIL is released.
  Patch by haypo.
........
  r67848 | benjamin.peterson | 2008-12-18 20:28:56 -0600 (Thu, 18 Dec 2008) | 1 line
  fix typo
........
  r67849 | benjamin.peterson | 2008-12-18 20:31:35 -0600 (Thu, 18 Dec 2008) | 1 line
  _call_method -> _callmethod and _get_value to _getvalue
........
  r67850 | raymond.hettinger | 2008-12-19 03:06:07 -0600 (Fri, 19 Dec 2008) | 9 lines
  Fix-up and clean-up docs for int.bit_length().
  * Replace dramatic footnote with in-line comment about possible round-off errors in logarithms of large numbers.
  * Add comments to the pure python code equivalent.
  * replace floor() with int() in the mathematical equivalent so the type is correct (should be an int, not a float).
  * add abs() to the mathematical equivalent so that it matches the previous line that it is supposed to be equivalent to.
  * make one combined example with a negative input.
........
  r67862 | benjamin.peterson | 2008-12-19 20:48:02 -0600 (Fri, 19 Dec 2008) | 1 line
  copy sentence from docstring
........
  r67863 | benjamin.peterson | 2008-12-19 20:51:26 -0600 (Fri, 19 Dec 2008) | 1 line
  add headings
........
  r67864 | benjamin.peterson | 2008-12-19 20:57:19 -0600 (Fri, 19 Dec 2008) | 1 line
  beef up docstring
........
  r67880 | benjamin.peterson | 2008-12-20 16:49:24 -0600 (Sat, 20 Dec 2008) | 1 line
  remove redundant sentence
........
  r67882 | benjamin.peterson | 2008-12-20 16:59:49 -0600 (Sat, 20 Dec 2008) | 1 line
  add some recent releases to the list
........
											
										 
											2008-12-21 00:06:59 +00:00
										 |  |  | 		gil = PyGILState_Ensure(); | 
					
						
							| 
									
										
										
										
											2009-04-05 11:47:34 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-02-22 22:39:18 +00:00
										 |  |  | 		(void)PyObject_Print(op, stderr, 0); | 
					
						
							| 
									
										
										
										
											2009-04-05 11:47:34 +00:00
										 |  |  | #ifdef WITH_THREAD
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 67654,67676-67677,67681,67692,67725,67761,67784-67785,67787-67788,67802,67848-67850,67862-67864,67880,67882 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r67654 | georg.brandl | 2008-12-07 16:42:09 -0600 (Sun, 07 Dec 2008) | 2 lines
  #4457: rewrite __import__() documentation.
........
  r67676 | benjamin.peterson | 2008-12-08 20:03:03 -0600 (Mon, 08 Dec 2008) | 1 line
  specify how things are copied
........
  r67677 | benjamin.peterson | 2008-12-08 20:05:11 -0600 (Mon, 08 Dec 2008) | 1 line
  revert unrelated change to installer script
........
  r67681 | jeremy.hylton | 2008-12-09 15:03:10 -0600 (Tue, 09 Dec 2008) | 2 lines
  Add simple unittests for Request
........
  r67692 | amaury.forgeotdarc | 2008-12-10 18:03:42 -0600 (Wed, 10 Dec 2008) | 2 lines
  #1030250: correctly pass the dry_run option to the mkpath() function.
........
  r67725 | benjamin.peterson | 2008-12-12 22:02:20 -0600 (Fri, 12 Dec 2008) | 1 line
  fix incorrect example
........
  r67761 | benjamin.peterson | 2008-12-14 11:26:04 -0600 (Sun, 14 Dec 2008) | 1 line
  fix missing bracket
........
  r67784 | georg.brandl | 2008-12-15 02:33:58 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4446: document "platforms" argument for setup().
........
  r67785 | georg.brandl | 2008-12-15 02:36:11 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4611: fix typo.
........
  r67787 | georg.brandl | 2008-12-15 02:58:59 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4578: fix has_key() usage in compiler package.
........
  r67788 | georg.brandl | 2008-12-15 03:07:39 -0600 (Mon, 15 Dec 2008) | 2 lines
  #4568: remove limitation in varargs callback example.
........
  r67802 | amaury.forgeotdarc | 2008-12-15 16:29:14 -0600 (Mon, 15 Dec 2008) | 4 lines
  #3632: the "pyo" macro from gdbinit can now run when the GIL is released.
  Patch by haypo.
........
  r67848 | benjamin.peterson | 2008-12-18 20:28:56 -0600 (Thu, 18 Dec 2008) | 1 line
  fix typo
........
  r67849 | benjamin.peterson | 2008-12-18 20:31:35 -0600 (Thu, 18 Dec 2008) | 1 line
  _call_method -> _callmethod and _get_value to _getvalue
........
  r67850 | raymond.hettinger | 2008-12-19 03:06:07 -0600 (Fri, 19 Dec 2008) | 9 lines
  Fix-up and clean-up docs for int.bit_length().
  * Replace dramatic footnote with in-line comment about possible round-off errors in logarithms of large numbers.
  * Add comments to the pure python code equivalent.
  * replace floor() with int() in the mathematical equivalent so the type is correct (should be an int, not a float).
  * add abs() to the mathematical equivalent so that it matches the previous line that it is supposed to be equivalent to.
  * make one combined example with a negative input.
........
  r67862 | benjamin.peterson | 2008-12-19 20:48:02 -0600 (Fri, 19 Dec 2008) | 1 line
  copy sentence from docstring
........
  r67863 | benjamin.peterson | 2008-12-19 20:51:26 -0600 (Fri, 19 Dec 2008) | 1 line
  add headings
........
  r67864 | benjamin.peterson | 2008-12-19 20:57:19 -0600 (Fri, 19 Dec 2008) | 1 line
  beef up docstring
........
  r67880 | benjamin.peterson | 2008-12-20 16:49:24 -0600 (Sat, 20 Dec 2008) | 1 line
  remove redundant sentence
........
  r67882 | benjamin.peterson | 2008-12-20 16:59:49 -0600 (Sat, 20 Dec 2008) | 1 line
  add some recent releases to the list
........
											
										 
											2008-12-21 00:06:59 +00:00
										 |  |  | 		PyGILState_Release(gil); | 
					
						
							| 
									
										
										
										
											2009-04-05 11:47:34 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2006-03-01 05:41:20 +00:00
										 |  |  | 		/* XXX(twouters) cast refcount to long until %zd is
 | 
					
						
							|  |  |  | 		   universally available */ | 
					
						
							| 
									
										
										
										
											2001-09-14 15:50:08 +00:00
										 |  |  | 		fprintf(stderr, "\n" | 
					
						
							|  |  |  | 			"type    : %s\n" | 
					
						
							| 
									
										
										
										
											2006-03-01 05:41:20 +00:00
										 |  |  | 			"refcount: %ld\n" | 
					
						
							| 
									
										
										
										
											2001-09-14 15:50:08 +00:00
										 |  |  | 			"address : %p\n", | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 			Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name, | 
					
						
							| 
									
										
										
										
											2006-03-01 05:41:20 +00:00
										 |  |  | 			(long)op->ob_refcnt, | 
					
						
							| 
									
										
										
										
											2001-09-14 15:50:08 +00:00
										 |  |  | 			op); | 
					
						
							| 
									
										
										
										
											2001-02-22 22:39:18 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2001-01-23 16:24:35 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2001-01-23 16:33:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | PyObject * | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyObject_Repr(PyObject *v) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2007-08-26 04:19:43 +00:00
										 |  |  | 	PyObject *res; | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 	if (PyErr_CheckSignals()) | 
					
						
							| 
									
										
										
										
											1991-06-07 16:10:43 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1998-04-28 16:06:54 +00:00
										 |  |  | #ifdef USE_STACKCHECK
 | 
					
						
							|  |  |  | 	if (PyOS_CheckStack()) { | 
					
						
							| 
									
										
										
										
											2000-10-24 19:57:45 +00:00
										 |  |  | 		PyErr_SetString(PyExc_MemoryError, "stack overflow"); | 
					
						
							| 
									
										
										
										
											1998-04-28 16:06:54 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1991-06-07 16:10:43 +00:00
										 |  |  | 	if (v == NULL) | 
					
						
							| 
									
										
										
										
											2007-05-18 17:15:44 +00:00
										 |  |  | 		return PyUnicode_FromString("<NULL>"); | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	if (Py_TYPE(v)->tp_repr == NULL) | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  | 		return PyUnicode_FromFormat("<%s object at %p>", | 
					
						
							|  |  |  |                                             v->ob_type->tp_name, v); | 
					
						
							|  |  |  |         res = (*v->ob_type->tp_repr)(v); | 
					
						
							|  |  |  |         if (res != NULL && !PyUnicode_Check(res)) { | 
					
						
							|  |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "__repr__ returned non-string (type %.200s)", | 
					
						
							|  |  |  | 			     res->ob_type->tp_name); | 
					
						
							|  |  |  | 		Py_DECREF(res); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return res; | 
					
						
							| 
									
										
										
										
											2007-05-18 17:15:44 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | PyObject * | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  | PyObject_Str(PyObject *v) | 
					
						
							| 
									
										
										
										
											1993-11-05 10:22:19 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2000-03-10 22:55:18 +00:00
										 |  |  | 	PyObject *res; | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  | 	if (PyErr_CheckSignals()) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | #ifdef USE_STACKCHECK
 | 
					
						
							|  |  |  | 	if (PyOS_CheckStack()) { | 
					
						
							|  |  |  | 		PyErr_SetString(PyExc_MemoryError, "stack overflow"); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1993-11-05 10:22:19 +00:00
										 |  |  | 	if (v == NULL) | 
					
						
							| 
									
										
										
										
											2007-08-26 04:19:43 +00:00
										 |  |  | 		return PyUnicode_FromString("<NULL>"); | 
					
						
							| 
									
										
										
										
											2005-08-12 17:34:58 +00:00
										 |  |  | 	if (PyUnicode_CheckExact(v)) { | 
					
						
							|  |  |  | 		Py_INCREF(v); | 
					
						
							|  |  |  | 		return v; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	if (Py_TYPE(v)->tp_str == NULL) | 
					
						
							| 
									
										
										
										
											2001-05-01 16:53:37 +00:00
										 |  |  | 		return PyObject_Repr(v); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 58221-58741 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r58221 | georg.brandl | 2007-09-20 10:57:59 -0700 (Thu, 20 Sep 2007) | 2 lines
  Patch #1181: add os.environ.clear() method.
........
  r58225 | sean.reifschneider | 2007-09-20 23:33:28 -0700 (Thu, 20 Sep 2007) | 3 lines
  Issue1704287: "make install" fails unless you do "make" first.  Make
     oldsharedmods and sharedmods in "libinstall".
........
  r58232 | guido.van.rossum | 2007-09-22 13:18:03 -0700 (Sat, 22 Sep 2007) | 4 lines
  Patch # 188 by Philip Jenvey.
  Make tell() mark CRLF as a newline.
  With unit test.
........
  r58242 | georg.brandl | 2007-09-24 10:55:47 -0700 (Mon, 24 Sep 2007) | 2 lines
  Fix typo and double word.
........
  r58245 | georg.brandl | 2007-09-24 10:59:28 -0700 (Mon, 24 Sep 2007) | 2 lines
  #1196: document default radix for int().
........
  r58247 | georg.brandl | 2007-09-24 11:08:24 -0700 (Mon, 24 Sep 2007) | 2 lines
  #1177: accept 2xx responses for https too, not only http.
........
  r58249 | andrew.kuchling | 2007-09-24 16:45:51 -0700 (Mon, 24 Sep 2007) | 1 line
  Remove stray odd character; grammar fix
........
  r58250 | andrew.kuchling | 2007-09-24 16:46:28 -0700 (Mon, 24 Sep 2007) | 1 line
  Typo fix
........
  r58251 | andrew.kuchling | 2007-09-24 17:09:42 -0700 (Mon, 24 Sep 2007) | 1 line
  Add various items
........
  r58268 | vinay.sajip | 2007-09-26 22:34:45 -0700 (Wed, 26 Sep 2007) | 1 line
  Change to flush and close logic to fix #1760556.
........
  r58269 | vinay.sajip | 2007-09-26 22:38:51 -0700 (Wed, 26 Sep 2007) | 1 line
  Change to basicConfig() to fix #1021.
........
  r58270 | georg.brandl | 2007-09-26 23:26:58 -0700 (Wed, 26 Sep 2007) | 2 lines
  #1208: document match object's boolean value.
........
  r58271 | vinay.sajip | 2007-09-26 23:56:13 -0700 (Wed, 26 Sep 2007) | 1 line
  Minor date change.
........
  r58272 | vinay.sajip | 2007-09-27 00:35:10 -0700 (Thu, 27 Sep 2007) | 1 line
  Change to LogRecord.__init__() to fix #1206. Note that archaic use of type(x) == types.DictType is because of keeping 1.5.2 compatibility. While this is much less relevant these days, there probably needs to be a separate commit for removing all archaic constructs at the same time.
........
  r58288 | brett.cannon | 2007-09-30 12:45:10 -0700 (Sun, 30 Sep 2007) | 9 lines
  tuple.__repr__ did not consider a reference loop as it is not possible from
  Python code; but it is possible from C.  object.__str__ had the issue of not
  expecting a type to doing something within it's tp_str implementation that
  could trigger an infinite recursion, but it could in C code..  Both found
  thanks to BaseException and how it handles its repr.
  Closes issue #1686386.  Thanks to Thomas Herve for taking an initial stab at
  coming up with a solution.
........
  r58289 | brett.cannon | 2007-09-30 13:37:19 -0700 (Sun, 30 Sep 2007) | 3 lines
  Fix error introduced by r58288; if a tuple is length 0 return its repr and
  don't worry about any self-referring tuples.
........
  r58294 | facundo.batista | 2007-10-02 10:01:24 -0700 (Tue, 02 Oct 2007) | 11 lines
  Made the various is_* operations return booleans.  This was discussed
  with Cawlishaw by mail, and he basically confirmed that to these is_*
  operations, there's no need to return Decimal(0) and Decimal(1) if
  the language supports the False and True booleans.
  Also added a few tests for the these functions in extra.decTest, since
  they are mostly untested (apart from the doctests).
  Thanks Mark Dickinson
........
  r58295 | facundo.batista | 2007-10-02 11:21:18 -0700 (Tue, 02 Oct 2007) | 4 lines
  Added a class to store the digits of log(10), so that they can be made
  available when necessary without recomputing.  Thanks Mark Dickinson
........
  r58299 | mark.summerfield | 2007-10-03 01:53:21 -0700 (Wed, 03 Oct 2007) | 4 lines
  Added note in footnote about string comparisons about
  unicodedata.normalize().
........
  r58304 | raymond.hettinger | 2007-10-03 14:18:11 -0700 (Wed, 03 Oct 2007) | 1 line
  enumerate() is no longer bounded to using sequences shorter than LONG_MAX.  The possibility of overflow was sending some newsgroup posters into a tizzy.
........
  r58305 | raymond.hettinger | 2007-10-03 17:20:27 -0700 (Wed, 03 Oct 2007) | 1 line
  itertools.count() no longer limited to sys.maxint.
........
  r58306 | kurt.kaiser | 2007-10-03 18:49:54 -0700 (Wed, 03 Oct 2007) | 3 lines
  Assume that the user knows when he wants to end the line; don't insert
  something he didn't select or complete.
........
  r58307 | kurt.kaiser | 2007-10-03 19:07:50 -0700 (Wed, 03 Oct 2007) | 2 lines
  Remove unused theme that was causing a fault in p3k.
........
  r58308 | kurt.kaiser | 2007-10-03 19:09:17 -0700 (Wed, 03 Oct 2007) | 2 lines
  Clean up EditorWindow close.
........
  r58309 | kurt.kaiser | 2007-10-03 19:53:07 -0700 (Wed, 03 Oct 2007) | 7 lines
  textView cleanup. Patch 1718043 Tal Einat.
  M    idlelib/EditorWindow.py
  M    idlelib/aboutDialog.py
  M    idlelib/textView.py
  M    idlelib/NEWS.txt
........
  r58310 | kurt.kaiser | 2007-10-03 20:11:12 -0700 (Wed, 03 Oct 2007) | 3 lines
  configDialog cleanup. Patch 1730217 Tal Einat.
........
  r58311 | neal.norwitz | 2007-10-03 23:00:48 -0700 (Wed, 03 Oct 2007) | 4 lines
  Coverity #151: Remove deadcode.
  All this code already exists above starting at line 653.
........
  r58325 | fred.drake | 2007-10-04 19:46:12 -0700 (Thu, 04 Oct 2007) | 1 line
  wrap lines to <80 characters before fixing errors
........
  r58326 | raymond.hettinger | 2007-10-04 19:47:07 -0700 (Thu, 04 Oct 2007) | 6 lines
  Add __asdict__() to NamedTuple and refine the docs.
  Add maxlen support to deque() and fixup docs.
  Partially fix __reduce__().  The None as a third arg was no longer supported.
  Still needs work on __reduce__() to handle recursive inputs.
........
  r58327 | fred.drake | 2007-10-04 19:48:32 -0700 (Thu, 04 Oct 2007) | 3 lines
  move descriptions of ac_(in|out)_buffer_size to the right place
  http://bugs.python.org/issue1053
........
  r58329 | neal.norwitz | 2007-10-04 20:39:17 -0700 (Thu, 04 Oct 2007) | 3 lines
  dict could be NULL, so we need to XDECREF.
  Fix a compiler warning about passing a PyTypeObject* instead of PyObject*.
........
  r58330 | neal.norwitz | 2007-10-04 20:41:19 -0700 (Thu, 04 Oct 2007) | 2 lines
  Fix Coverity #158: Check the correct variable.
........
  r58332 | neal.norwitz | 2007-10-04 22:01:38 -0700 (Thu, 04 Oct 2007) | 7 lines
  Fix Coverity #159.
  This code was broken if save() returned a negative number since i contained
  a boolean value and then we compared i < 0 which should never be true.
  Will backport (assuming it's necessary)
........
  r58334 | neal.norwitz | 2007-10-04 22:29:17 -0700 (Thu, 04 Oct 2007) | 1 line
  Add a note about fixing some more warnings found by Coverity.
........
  r58338 | raymond.hettinger | 2007-10-05 12:07:31 -0700 (Fri, 05 Oct 2007) | 1 line
  Restore BEGIN/END THREADS macros which were squashed in the previous checkin
........
  r58343 | gregory.p.smith | 2007-10-06 00:48:10 -0700 (Sat, 06 Oct 2007) | 3 lines
  Stab in the dark attempt to fix the test_bsddb3 failure on sparc and S-390
  ubuntu buildbots.
........
  r58344 | gregory.p.smith | 2007-10-06 00:51:59 -0700 (Sat, 06 Oct 2007) | 2 lines
  Allows BerkeleyDB 4.6.x >= 4.6.21 for the bsddb module.
........
  r58348 | gregory.p.smith | 2007-10-06 08:47:37 -0700 (Sat, 06 Oct 2007) | 3 lines
  Use the host the author likely meant in the first place.  pop.gmail.com is
  reliable.  gmail.org is someones personal domain.
........
  r58351 | neal.norwitz | 2007-10-06 12:16:28 -0700 (Sat, 06 Oct 2007) | 3 lines
  Ensure that this test will pass even if another test left an unwritable TESTFN.
  Also use the safe unlink in test_support instead of rolling our own here.
........
  r58368 | georg.brandl | 2007-10-08 00:50:24 -0700 (Mon, 08 Oct 2007) | 3 lines
  #1123: fix the docs for the str.split(None, sep) case.
  Also expand a few other methods' docs, which had more info in the deprecated string module docs.
........
  r58369 | georg.brandl | 2007-10-08 01:06:05 -0700 (Mon, 08 Oct 2007) | 2 lines
  Update docstring of sched, also remove an unused assignment.
........
  r58370 | raymond.hettinger | 2007-10-08 02:14:28 -0700 (Mon, 08 Oct 2007) | 5 lines
  Add comments to NamedTuple code.
  Let the field spec be either a string or a non-string sequence (suggested by Martin Blais with use cases).
  Improve the error message in the case of a SyntaxError (caused by a duplicate field name).
........
  r58371 | raymond.hettinger | 2007-10-08 02:56:29 -0700 (Mon, 08 Oct 2007) | 1 line
  Missed a line in the docs
........
  r58372 | raymond.hettinger | 2007-10-08 03:11:51 -0700 (Mon, 08 Oct 2007) | 1 line
  Better variable names
........
  r58376 | georg.brandl | 2007-10-08 07:12:47 -0700 (Mon, 08 Oct 2007) | 3 lines
  #1199: docs for tp_as_{number,sequence,mapping}, by Amaury Forgeot d'Arc.
  No need to merge this to py3k!
........
  r58380 | raymond.hettinger | 2007-10-08 14:26:58 -0700 (Mon, 08 Oct 2007) | 1 line
  Eliminate camelcase function name
........
  r58381 | andrew.kuchling | 2007-10-08 16:23:03 -0700 (Mon, 08 Oct 2007) | 1 line
  Eliminate camelcase function name
........
  r58382 | raymond.hettinger | 2007-10-08 18:36:23 -0700 (Mon, 08 Oct 2007) | 1 line
  Make the error messages more specific
........
  r58384 | gregory.p.smith | 2007-10-08 23:02:21 -0700 (Mon, 08 Oct 2007) | 10 lines
  Splits Modules/_bsddb.c up into bsddb.h and _bsddb.c and adds a C API
  object available as bsddb.db.api.  This is based on the patch submitted
  by Duncan Grisby here:
    http://sourceforge.net/tracker/index.php?func=detail&aid=1551895&group_id=13900&atid=313900
  See this thread for additional info:
    http://sourceforge.net/mailarchive/forum.php?thread_name=E1GAVDK-0002rk-Iw%40apasphere.com&forum_name=pybsddb-users
  It also cleans up the code a little by removing some ifdef/endifs for
  python prior to 2.1 and for unsupported Berkeley DB <= 3.2.
........
  r58385 | gregory.p.smith | 2007-10-08 23:50:43 -0700 (Mon, 08 Oct 2007) | 5 lines
  Fix a double free when positioning a database cursor to a non-existant
  string key (and probably a few other situations with string keys).
  This was reported with a patch as pybsddb sourceforge bug 1708868 by
  jjjhhhlll at gmail.
........
  r58386 | gregory.p.smith | 2007-10-09 00:19:11 -0700 (Tue, 09 Oct 2007) | 3 lines
  Use the highest cPickle protocol in bsddb.dbshelve.  This comes from
  sourceforge pybsddb patch 1551443 by w_barnes.
........
  r58394 | gregory.p.smith | 2007-10-09 11:26:02 -0700 (Tue, 09 Oct 2007) | 2 lines
  remove another sleepycat reference
........
  r58396 | kurt.kaiser | 2007-10-09 12:31:30 -0700 (Tue, 09 Oct 2007) | 3 lines
  Allow interrupt only when executing user code in subprocess
  Patch 1225 Tal Einat modified from IDLE-Spoon.
........
  r58399 | brett.cannon | 2007-10-09 17:07:50 -0700 (Tue, 09 Oct 2007) | 5 lines
  Remove file-level typedefs that were inconsistently used throughout the file.
  Just move over to the public API names.
  Closes issue1238.
........
  r58401 | raymond.hettinger | 2007-10-09 17:26:46 -0700 (Tue, 09 Oct 2007) | 1 line
  Accept Jim Jewett's api suggestion to use None instead of -1 to indicate unbounded deques.
........
  r58403 | kurt.kaiser | 2007-10-09 17:55:40 -0700 (Tue, 09 Oct 2007) | 2 lines
  Allow cursor color change w/o restart. Patch 1725576 Tal Einat.
........
  r58404 | kurt.kaiser | 2007-10-09 18:06:47 -0700 (Tue, 09 Oct 2007) | 2 lines
  show paste if > 80 columns.  Patch 1659326 Tal Einat.
........
  r58415 | thomas.heller | 2007-10-11 12:51:32 -0700 (Thu, 11 Oct 2007) | 5 lines
  On OS X, use os.uname() instead of gestalt.sysv(...) to get the
  operating system version.  This allows to use ctypes when Python
  was configured with --disable-toolbox-glue.
........
  r58419 | neal.norwitz | 2007-10-11 20:01:01 -0700 (Thu, 11 Oct 2007) | 1 line
  Get rid of warning about not being able to create an existing directory.
........
  r58420 | neal.norwitz | 2007-10-11 20:01:30 -0700 (Thu, 11 Oct 2007) | 1 line
  Get rid of warnings on a bunch of platforms by using a proper prototype.
........
  r58421 | neal.norwitz | 2007-10-11 20:01:54 -0700 (Thu, 11 Oct 2007) | 4 lines
  Get rid of compiler warning about retval being used (returned) without
  being initialized.  (gcc warning and Coverity 202)
........
  r58422 | neal.norwitz | 2007-10-11 20:03:23 -0700 (Thu, 11 Oct 2007) | 1 line
  Fix Coverity 168:  Close the file before returning (exiting).
........
  r58423 | neal.norwitz | 2007-10-11 20:04:18 -0700 (Thu, 11 Oct 2007) | 4 lines
  Fix Coverity 180:  Don't overallocate.  We don't need structs, but pointers.
  Also fix a memory leak.
........
  r58424 | neal.norwitz | 2007-10-11 20:05:19 -0700 (Thu, 11 Oct 2007) | 5 lines
  Fix Coverity 185-186:  If the passed in FILE is NULL, uninitialized memory
  would be accessed.
  Will backport.
........
  r58425 | neal.norwitz | 2007-10-11 20:52:34 -0700 (Thu, 11 Oct 2007) | 1 line
  Get this module to compile with bsddb versions prior to 4.3
........
  r58430 | martin.v.loewis | 2007-10-12 01:56:52 -0700 (Fri, 12 Oct 2007) | 3 lines
  Bug #1216: Restore support for Visual Studio 2002.
  Will backport to 2.5.
........
  r58433 | raymond.hettinger | 2007-10-12 10:53:11 -0700 (Fri, 12 Oct 2007) | 1 line
  Fix test of count.__repr__() to ignore the 'L' if the count is a long
........
  r58434 | gregory.p.smith | 2007-10-12 11:44:06 -0700 (Fri, 12 Oct 2007) | 4 lines
  Fixes http://bugs.python.org/issue1233 - bsddb.dbshelve.DBShelf.append
  was useless due to inverted logic.  Also adds a test case for RECNO dbs
  to test_dbshelve.
........
  r58445 | georg.brandl | 2007-10-13 06:20:03 -0700 (Sat, 13 Oct 2007) | 2 lines
  Fix email example.
........
  r58450 | gregory.p.smith | 2007-10-13 16:02:05 -0700 (Sat, 13 Oct 2007) | 2 lines
  Fix an uncollectable reference leak in bsddb.db.DBShelf.append
........
  r58453 | neal.norwitz | 2007-10-13 17:18:40 -0700 (Sat, 13 Oct 2007) | 8 lines
  Let the O/S supply a port if none of the default ports can be used.
  This should make the tests more robust at the expense of allowing
  tests to be sloppier by not requiring them to cleanup after themselves.
  (It will legitamitely help when running two test suites simultaneously
  or if another process is already using one of the predefined ports.)
  Also simplifies (slightLy) the exception handling elsewhere.
........
  r58459 | neal.norwitz | 2007-10-14 11:30:21 -0700 (Sun, 14 Oct 2007) | 2 lines
  Don't raise a string exception, they don't work anymore.
........
  r58460 | neal.norwitz | 2007-10-14 11:40:37 -0700 (Sun, 14 Oct 2007) | 1 line
  Use unittest for assertions
........
  r58468 | armin.rigo | 2007-10-15 00:48:35 -0700 (Mon, 15 Oct 2007) | 2 lines
  test_bigbits was not testing what it seemed to.
........
  r58471 | guido.van.rossum | 2007-10-15 08:54:11 -0700 (Mon, 15 Oct 2007) | 3 lines
  Change a PyErr_Print() into a PyErr_Clear(),
  per discussion in issue 1031213.
........
  r58500 | raymond.hettinger | 2007-10-16 12:18:30 -0700 (Tue, 16 Oct 2007) | 1 line
  Improve error messages
........
  r58506 | raymond.hettinger | 2007-10-16 14:28:32 -0700 (Tue, 16 Oct 2007) | 1 line
  More docs, error messages, and tests
........
  r58507 | andrew.kuchling | 2007-10-16 15:58:03 -0700 (Tue, 16 Oct 2007) | 1 line
  Add items
........
  r58508 | brett.cannon | 2007-10-16 16:24:06 -0700 (Tue, 16 Oct 2007) | 3 lines
  Remove ``:const:`` notation on None in parameter list.  Since the markup is not
  rendered for parameters it just showed up as ``:const:`None` `` in the output.
........
  r58509 | brett.cannon | 2007-10-16 16:26:45 -0700 (Tue, 16 Oct 2007) | 3 lines
  Re-order some functions whose parameters differ between PyObject and const char
  * so that they are next to each other.
........
  r58522 | armin.rigo | 2007-10-17 11:46:37 -0700 (Wed, 17 Oct 2007) | 5 lines
  Fix the overflow checking of list_repeat.
  Introduce overflow checking into list_inplace_repeat.
  Backport candidate, possibly.
........
  r58530 | facundo.batista | 2007-10-17 20:16:03 -0700 (Wed, 17 Oct 2007) | 7 lines
  Issue #1580738.  When HTTPConnection reads the whole stream with read(),
  it closes itself.  When the stream is read in several calls to read(n),
  it should behave in the same way if HTTPConnection knows where the end
  of the stream is (through self.length).  Added a test case for this
  behaviour.
........
  r58531 | facundo.batista | 2007-10-17 20:44:48 -0700 (Wed, 17 Oct 2007) | 3 lines
  Issue 1289, just a typo.
........
  r58532 | gregory.p.smith | 2007-10-18 00:56:54 -0700 (Thu, 18 Oct 2007) | 4 lines
  cleanup test_dbtables to use mkdtemp.  cleanup dbtables to pass txn as a
  keyword argument whenever possible to avoid bugs and confusion.  (dbtables.py
  line 447 self.db.get using txn as a non-keyword was an actual bug due to this)
........
  r58533 | gregory.p.smith | 2007-10-18 01:34:20 -0700 (Thu, 18 Oct 2007) | 4 lines
  Fix a weird bug in dbtables: if it chose a random rowid string that contained
  NULL bytes it would cause the database all sorts of problems in the future
  leading to very strange random failures and corrupt dbtables.bsdTableDb dbs.
........
  r58534 | gregory.p.smith | 2007-10-18 09:32:02 -0700 (Thu, 18 Oct 2007) | 3 lines
  A cleaner fix than the one committed last night.  Generate random rowids that
  do not contain null bytes.
........
  r58537 | gregory.p.smith | 2007-10-18 10:17:57 -0700 (Thu, 18 Oct 2007) | 2 lines
  mention bsddb fixes.
........
  r58538 | raymond.hettinger | 2007-10-18 14:13:06 -0700 (Thu, 18 Oct 2007) | 1 line
  Remove useless warning
........
  r58539 | gregory.p.smith | 2007-10-19 00:31:20 -0700 (Fri, 19 Oct 2007) | 2 lines
  squelch the warning that this test is supposed to trigger.
........
  r58542 | georg.brandl | 2007-10-19 05:32:39 -0700 (Fri, 19 Oct 2007) | 2 lines
  Clarify wording for apply().
........
  r58544 | mark.summerfield | 2007-10-19 05:48:17 -0700 (Fri, 19 Oct 2007) | 3 lines
  Added a cross-ref to each other.
........
  r58545 | georg.brandl | 2007-10-19 10:38:49 -0700 (Fri, 19 Oct 2007) | 2 lines
  #1284: "S" means "seen", not unread.
........
  r58548 | thomas.heller | 2007-10-19 11:11:41 -0700 (Fri, 19 Oct 2007) | 4 lines
  Fix ctypes on 32-bit systems when Python is configured --with-system-ffi.
  See also https://bugs.launchpad.net/bugs/72505.
  Ported from release25-maint branch.
........
  r58550 | facundo.batista | 2007-10-19 12:25:57 -0700 (Fri, 19 Oct 2007) | 8 lines
  The constructor from tuple was way too permissive: it allowed bad
  coefficient numbers, floats in the sign, and other details that
  generated directly the wrong number in the best case, or triggered
  misfunctionality in the alorithms.
  Test cases added for these issues. Thanks Mark Dickinson.
........
  r58559 | georg.brandl | 2007-10-20 06:22:53 -0700 (Sat, 20 Oct 2007) | 2 lines
  Fix code being interpreted as a target.
........
  r58561 | georg.brandl | 2007-10-20 06:36:24 -0700 (Sat, 20 Oct 2007) | 2 lines
  Document new "cmdoption" directive.
........
  r58562 | georg.brandl | 2007-10-20 08:21:22 -0700 (Sat, 20 Oct 2007) | 2 lines
  Make a path more Unix-standardy.
........
  r58564 | georg.brandl | 2007-10-20 10:51:39 -0700 (Sat, 20 Oct 2007) | 2 lines
  Document new directive "envvar".
........
  r58567 | georg.brandl | 2007-10-20 11:08:14 -0700 (Sat, 20 Oct 2007) | 6 lines
  * Add new toplevel chapter, "Using Python." (how to install,
    configure and setup python on different platforms -- at least
    in theory.)
  * Move the Python on Mac docs in that chapter.
  * Add a new chapter about the command line invocation, by stargaming.
........
  r58568 | georg.brandl | 2007-10-20 11:33:20 -0700 (Sat, 20 Oct 2007) | 2 lines
  Change title, for now.
........
  r58569 | georg.brandl | 2007-10-20 11:39:25 -0700 (Sat, 20 Oct 2007) | 2 lines
  Add entry to ACKS.
........
  r58570 | georg.brandl | 2007-10-20 12:05:45 -0700 (Sat, 20 Oct 2007) | 2 lines
  Clarify -E docs.
........
  r58571 | georg.brandl | 2007-10-20 12:08:36 -0700 (Sat, 20 Oct 2007) | 2 lines
  Even more clarification.
........
  r58572 | andrew.kuchling | 2007-10-20 12:25:37 -0700 (Sat, 20 Oct 2007) | 1 line
  Fix protocol name
........
  r58573 | andrew.kuchling | 2007-10-20 12:35:18 -0700 (Sat, 20 Oct 2007) | 1 line
  Various items
........
  r58574 | andrew.kuchling | 2007-10-20 12:39:35 -0700 (Sat, 20 Oct 2007) | 1 line
  Use correct header line
........
  r58576 | armin.rigo | 2007-10-21 02:14:15 -0700 (Sun, 21 Oct 2007) | 3 lines
  Add a crasher for the long-standing issue with closing a file
  while another thread uses it.
........
  r58577 | georg.brandl | 2007-10-21 03:01:56 -0700 (Sun, 21 Oct 2007) | 2 lines
  Remove duplicate crasher.
........
  r58578 | georg.brandl | 2007-10-21 03:24:20 -0700 (Sun, 21 Oct 2007) | 2 lines
  Unify "byte code" to "bytecode". Also sprinkle :term: markup for it.
........
  r58579 | georg.brandl | 2007-10-21 03:32:54 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add markup to new function descriptions.
........
  r58580 | georg.brandl | 2007-10-21 03:45:46 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add :term:s for descriptors.
........
  r58581 | georg.brandl | 2007-10-21 03:46:24 -0700 (Sun, 21 Oct 2007) | 2 lines
  Unify "file-descriptor" to "file descriptor".
........
  r58582 | georg.brandl | 2007-10-21 03:52:38 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add :term: for generators.
........
  r58583 | georg.brandl | 2007-10-21 05:10:28 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add :term:s for iterator.
........
  r58584 | georg.brandl | 2007-10-21 05:15:05 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add :term:s for "new-style class".
........
  r58588 | neal.norwitz | 2007-10-21 21:47:54 -0700 (Sun, 21 Oct 2007) | 1 line
  Add Chris Monson so he can edit PEPs.
........
  r58594 | guido.van.rossum | 2007-10-22 09:27:19 -0700 (Mon, 22 Oct 2007) | 4 lines
  Issue #1307, patch by Derek Shockey.
  When "MAIL" is received without args, an exception happens instead of
  sending a 501 syntax error response.
........
  r58598 | travis.oliphant | 2007-10-22 19:40:56 -0700 (Mon, 22 Oct 2007) | 1 line
  Add phuang patch from Issue 708374 which adds offset parameter to mmap module.
........
  r58601 | neal.norwitz | 2007-10-22 22:44:27 -0700 (Mon, 22 Oct 2007) | 2 lines
  Bug #1313, fix typo (wrong variable name) in example.
........
  r58609 | georg.brandl | 2007-10-23 11:21:35 -0700 (Tue, 23 Oct 2007) | 2 lines
  Update Pygments version from externals.
........
  r58618 | guido.van.rossum | 2007-10-23 12:25:41 -0700 (Tue, 23 Oct 2007) | 3 lines
  Issue 1307 by Derek Shockey, fox the same bug for RCPT.
  Neal: please backport!
........
  r58620 | raymond.hettinger | 2007-10-23 13:37:41 -0700 (Tue, 23 Oct 2007) | 1 line
  Shorter name for namedtuple()
........
  r58621 | andrew.kuchling | 2007-10-23 13:55:47 -0700 (Tue, 23 Oct 2007) | 1 line
  Update name
........
  r58622 | raymond.hettinger | 2007-10-23 14:23:07 -0700 (Tue, 23 Oct 2007) | 1 line
  Fixup news entry
........
  r58623 | raymond.hettinger | 2007-10-23 18:28:33 -0700 (Tue, 23 Oct 2007) | 1 line
  Optimize sum() for integer and float inputs.
........
  r58624 | raymond.hettinger | 2007-10-23 19:05:51 -0700 (Tue, 23 Oct 2007) | 1 line
  Fixup error return and add support for intermixed ints and floats/
........
  r58628 | vinay.sajip | 2007-10-24 03:47:06 -0700 (Wed, 24 Oct 2007) | 1 line
  Bug #1321: Fixed logic error in TimedRotatingFileHandler.__init__()
........
  r58641 | facundo.batista | 2007-10-24 12:11:08 -0700 (Wed, 24 Oct 2007) | 4 lines
  Issue 1290.  CharacterData.__repr__ was constructing a string
  in response that keeped having a non-ascii character.
........
  r58643 | thomas.heller | 2007-10-24 12:50:45 -0700 (Wed, 24 Oct 2007) | 1 line
  Added unittest for calling a function with paramflags (backport from py3k branch).
........
  r58645 | matthias.klose | 2007-10-24 13:00:44 -0700 (Wed, 24 Oct 2007) | 2 lines
  - Build using system ffi library on arm*-linux*.
........
  r58651 | georg.brandl | 2007-10-24 14:40:38 -0700 (Wed, 24 Oct 2007) | 2 lines
  Bug #1287: make os.environ.pop() work as expected.
........
  r58652 | raymond.hettinger | 2007-10-24 19:26:58 -0700 (Wed, 24 Oct 2007) | 1 line
  Missing DECREFs
........
  r58653 | matthias.klose | 2007-10-24 23:37:24 -0700 (Wed, 24 Oct 2007) | 2 lines
  - Build using system ffi library on arm*-linux*, pass --with-system-ffi to CONFIG_ARGS
........
  r58655 | thomas.heller | 2007-10-25 12:47:32 -0700 (Thu, 25 Oct 2007) | 2 lines
  ffi_type_longdouble may be already #defined.
  See issue 1324.
........
  r58656 | kurt.kaiser | 2007-10-25 15:43:45 -0700 (Thu, 25 Oct 2007) | 3 lines
  Correct an ancient bug in an unused path by removing that path: register() is
  now idempotent.
........
  r58660 | kurt.kaiser | 2007-10-25 17:10:09 -0700 (Thu, 25 Oct 2007) | 4 lines
  1. Add comments to provide top-level documentation.
  2. Refactor to use more descriptive names.
  3. Enhance tests in main().
........
  r58675 | georg.brandl | 2007-10-26 11:30:41 -0700 (Fri, 26 Oct 2007) | 2 lines
  Fix new pop() method on os.environ on ignorecase-platforms.
........
  r58696 | neal.norwitz | 2007-10-27 15:32:21 -0700 (Sat, 27 Oct 2007) | 1 line
  Update URL for Pygments.  0.8.1 is no longer available
........
  r58697 | hyeshik.chang | 2007-10-28 04:19:02 -0700 (Sun, 28 Oct 2007) | 3 lines
  - Add support for FreeBSD 8 which is recently forked from FreeBSD 7.
  - Regenerate IN module for most recent maintenance tree of FreeBSD 6 and 7.
........
  r58698 | hyeshik.chang | 2007-10-28 05:38:09 -0700 (Sun, 28 Oct 2007) | 2 lines
  Enable platform-specific tweaks for FreeBSD 8 (exactly same to FreeBSD 7's yet)
........
  r58700 | kurt.kaiser | 2007-10-28 12:03:59 -0700 (Sun, 28 Oct 2007) | 2 lines
  Add confirmation dialog before printing.  Patch 1717170 Tal Einat.
........
  r58706 | guido.van.rossum | 2007-10-29 13:52:45 -0700 (Mon, 29 Oct 2007) | 3 lines
  Patch 1353 by Jacob Winther.
  Add mp4 mapping to mimetypes.py.
........
  r58709 | guido.van.rossum | 2007-10-29 15:15:05 -0700 (Mon, 29 Oct 2007) | 6 lines
  Backport fixes for the code that decodes octal escapes (and for PyString
  also hex escapes) -- this was reaching beyond the end of the input string
  buffer, even though it is not supposed to be \0-terminated.
  This has no visible effect but is clearly the correct thing to do.
  (In 3.0 it had a visible effect after removing ob_sstate from PyString.)
........
  r58710 | kurt.kaiser | 2007-10-29 19:38:54 -0700 (Mon, 29 Oct 2007) | 7 lines
  check in Tal Einat's update to tabpage.py
  Patch 1612746
  M    configDialog.py
  M    NEWS.txt
  AM   tabbedpages.py
........
  r58715 | georg.brandl | 2007-10-30 10:51:18 -0700 (Tue, 30 Oct 2007) | 2 lines
  Use correct markup.
........
  r58716 | georg.brandl | 2007-10-30 10:57:12 -0700 (Tue, 30 Oct 2007) | 2 lines
  Make example about hiding None return values at the prompt clearer.
........
  r58728 | neal.norwitz | 2007-10-30 23:33:20 -0700 (Tue, 30 Oct 2007) | 1 line
  Fix some compiler warnings for signed comparisons on Unix and Windows.
........
  r58731 | martin.v.loewis | 2007-10-31 10:19:33 -0700 (Wed, 31 Oct 2007) | 2 lines
  Adding Christian Heimes.
........
  r58737 | raymond.hettinger | 2007-10-31 14:57:58 -0700 (Wed, 31 Oct 2007) | 1 line
  Clarify the reasons why pickle is almost always better than marshal
........
  r58739 | raymond.hettinger | 2007-10-31 15:15:49 -0700 (Wed, 31 Oct 2007) | 1 line
  Sets are marshalable.
........
											
										 
											2007-11-01 19:42:39 +00:00
										 |  |  | 	/* It is possible for a type to have a tp_str representation that loops
 | 
					
						
							|  |  |  | 	   infinitely. */ | 
					
						
							|  |  |  | 	if (Py_EnterRecursiveCall(" while getting the str of an object")) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	res = (*Py_TYPE(v)->tp_str)(v); | 
					
						
							| 
									
										
											  
											
												Merged revisions 58221-58741 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r58221 | georg.brandl | 2007-09-20 10:57:59 -0700 (Thu, 20 Sep 2007) | 2 lines
  Patch #1181: add os.environ.clear() method.
........
  r58225 | sean.reifschneider | 2007-09-20 23:33:28 -0700 (Thu, 20 Sep 2007) | 3 lines
  Issue1704287: "make install" fails unless you do "make" first.  Make
     oldsharedmods and sharedmods in "libinstall".
........
  r58232 | guido.van.rossum | 2007-09-22 13:18:03 -0700 (Sat, 22 Sep 2007) | 4 lines
  Patch # 188 by Philip Jenvey.
  Make tell() mark CRLF as a newline.
  With unit test.
........
  r58242 | georg.brandl | 2007-09-24 10:55:47 -0700 (Mon, 24 Sep 2007) | 2 lines
  Fix typo and double word.
........
  r58245 | georg.brandl | 2007-09-24 10:59:28 -0700 (Mon, 24 Sep 2007) | 2 lines
  #1196: document default radix for int().
........
  r58247 | georg.brandl | 2007-09-24 11:08:24 -0700 (Mon, 24 Sep 2007) | 2 lines
  #1177: accept 2xx responses for https too, not only http.
........
  r58249 | andrew.kuchling | 2007-09-24 16:45:51 -0700 (Mon, 24 Sep 2007) | 1 line
  Remove stray odd character; grammar fix
........
  r58250 | andrew.kuchling | 2007-09-24 16:46:28 -0700 (Mon, 24 Sep 2007) | 1 line
  Typo fix
........
  r58251 | andrew.kuchling | 2007-09-24 17:09:42 -0700 (Mon, 24 Sep 2007) | 1 line
  Add various items
........
  r58268 | vinay.sajip | 2007-09-26 22:34:45 -0700 (Wed, 26 Sep 2007) | 1 line
  Change to flush and close logic to fix #1760556.
........
  r58269 | vinay.sajip | 2007-09-26 22:38:51 -0700 (Wed, 26 Sep 2007) | 1 line
  Change to basicConfig() to fix #1021.
........
  r58270 | georg.brandl | 2007-09-26 23:26:58 -0700 (Wed, 26 Sep 2007) | 2 lines
  #1208: document match object's boolean value.
........
  r58271 | vinay.sajip | 2007-09-26 23:56:13 -0700 (Wed, 26 Sep 2007) | 1 line
  Minor date change.
........
  r58272 | vinay.sajip | 2007-09-27 00:35:10 -0700 (Thu, 27 Sep 2007) | 1 line
  Change to LogRecord.__init__() to fix #1206. Note that archaic use of type(x) == types.DictType is because of keeping 1.5.2 compatibility. While this is much less relevant these days, there probably needs to be a separate commit for removing all archaic constructs at the same time.
........
  r58288 | brett.cannon | 2007-09-30 12:45:10 -0700 (Sun, 30 Sep 2007) | 9 lines
  tuple.__repr__ did not consider a reference loop as it is not possible from
  Python code; but it is possible from C.  object.__str__ had the issue of not
  expecting a type to doing something within it's tp_str implementation that
  could trigger an infinite recursion, but it could in C code..  Both found
  thanks to BaseException and how it handles its repr.
  Closes issue #1686386.  Thanks to Thomas Herve for taking an initial stab at
  coming up with a solution.
........
  r58289 | brett.cannon | 2007-09-30 13:37:19 -0700 (Sun, 30 Sep 2007) | 3 lines
  Fix error introduced by r58288; if a tuple is length 0 return its repr and
  don't worry about any self-referring tuples.
........
  r58294 | facundo.batista | 2007-10-02 10:01:24 -0700 (Tue, 02 Oct 2007) | 11 lines
  Made the various is_* operations return booleans.  This was discussed
  with Cawlishaw by mail, and he basically confirmed that to these is_*
  operations, there's no need to return Decimal(0) and Decimal(1) if
  the language supports the False and True booleans.
  Also added a few tests for the these functions in extra.decTest, since
  they are mostly untested (apart from the doctests).
  Thanks Mark Dickinson
........
  r58295 | facundo.batista | 2007-10-02 11:21:18 -0700 (Tue, 02 Oct 2007) | 4 lines
  Added a class to store the digits of log(10), so that they can be made
  available when necessary without recomputing.  Thanks Mark Dickinson
........
  r58299 | mark.summerfield | 2007-10-03 01:53:21 -0700 (Wed, 03 Oct 2007) | 4 lines
  Added note in footnote about string comparisons about
  unicodedata.normalize().
........
  r58304 | raymond.hettinger | 2007-10-03 14:18:11 -0700 (Wed, 03 Oct 2007) | 1 line
  enumerate() is no longer bounded to using sequences shorter than LONG_MAX.  The possibility of overflow was sending some newsgroup posters into a tizzy.
........
  r58305 | raymond.hettinger | 2007-10-03 17:20:27 -0700 (Wed, 03 Oct 2007) | 1 line
  itertools.count() no longer limited to sys.maxint.
........
  r58306 | kurt.kaiser | 2007-10-03 18:49:54 -0700 (Wed, 03 Oct 2007) | 3 lines
  Assume that the user knows when he wants to end the line; don't insert
  something he didn't select or complete.
........
  r58307 | kurt.kaiser | 2007-10-03 19:07:50 -0700 (Wed, 03 Oct 2007) | 2 lines
  Remove unused theme that was causing a fault in p3k.
........
  r58308 | kurt.kaiser | 2007-10-03 19:09:17 -0700 (Wed, 03 Oct 2007) | 2 lines
  Clean up EditorWindow close.
........
  r58309 | kurt.kaiser | 2007-10-03 19:53:07 -0700 (Wed, 03 Oct 2007) | 7 lines
  textView cleanup. Patch 1718043 Tal Einat.
  M    idlelib/EditorWindow.py
  M    idlelib/aboutDialog.py
  M    idlelib/textView.py
  M    idlelib/NEWS.txt
........
  r58310 | kurt.kaiser | 2007-10-03 20:11:12 -0700 (Wed, 03 Oct 2007) | 3 lines
  configDialog cleanup. Patch 1730217 Tal Einat.
........
  r58311 | neal.norwitz | 2007-10-03 23:00:48 -0700 (Wed, 03 Oct 2007) | 4 lines
  Coverity #151: Remove deadcode.
  All this code already exists above starting at line 653.
........
  r58325 | fred.drake | 2007-10-04 19:46:12 -0700 (Thu, 04 Oct 2007) | 1 line
  wrap lines to <80 characters before fixing errors
........
  r58326 | raymond.hettinger | 2007-10-04 19:47:07 -0700 (Thu, 04 Oct 2007) | 6 lines
  Add __asdict__() to NamedTuple and refine the docs.
  Add maxlen support to deque() and fixup docs.
  Partially fix __reduce__().  The None as a third arg was no longer supported.
  Still needs work on __reduce__() to handle recursive inputs.
........
  r58327 | fred.drake | 2007-10-04 19:48:32 -0700 (Thu, 04 Oct 2007) | 3 lines
  move descriptions of ac_(in|out)_buffer_size to the right place
  http://bugs.python.org/issue1053
........
  r58329 | neal.norwitz | 2007-10-04 20:39:17 -0700 (Thu, 04 Oct 2007) | 3 lines
  dict could be NULL, so we need to XDECREF.
  Fix a compiler warning about passing a PyTypeObject* instead of PyObject*.
........
  r58330 | neal.norwitz | 2007-10-04 20:41:19 -0700 (Thu, 04 Oct 2007) | 2 lines
  Fix Coverity #158: Check the correct variable.
........
  r58332 | neal.norwitz | 2007-10-04 22:01:38 -0700 (Thu, 04 Oct 2007) | 7 lines
  Fix Coverity #159.
  This code was broken if save() returned a negative number since i contained
  a boolean value and then we compared i < 0 which should never be true.
  Will backport (assuming it's necessary)
........
  r58334 | neal.norwitz | 2007-10-04 22:29:17 -0700 (Thu, 04 Oct 2007) | 1 line
  Add a note about fixing some more warnings found by Coverity.
........
  r58338 | raymond.hettinger | 2007-10-05 12:07:31 -0700 (Fri, 05 Oct 2007) | 1 line
  Restore BEGIN/END THREADS macros which were squashed in the previous checkin
........
  r58343 | gregory.p.smith | 2007-10-06 00:48:10 -0700 (Sat, 06 Oct 2007) | 3 lines
  Stab in the dark attempt to fix the test_bsddb3 failure on sparc and S-390
  ubuntu buildbots.
........
  r58344 | gregory.p.smith | 2007-10-06 00:51:59 -0700 (Sat, 06 Oct 2007) | 2 lines
  Allows BerkeleyDB 4.6.x >= 4.6.21 for the bsddb module.
........
  r58348 | gregory.p.smith | 2007-10-06 08:47:37 -0700 (Sat, 06 Oct 2007) | 3 lines
  Use the host the author likely meant in the first place.  pop.gmail.com is
  reliable.  gmail.org is someones personal domain.
........
  r58351 | neal.norwitz | 2007-10-06 12:16:28 -0700 (Sat, 06 Oct 2007) | 3 lines
  Ensure that this test will pass even if another test left an unwritable TESTFN.
  Also use the safe unlink in test_support instead of rolling our own here.
........
  r58368 | georg.brandl | 2007-10-08 00:50:24 -0700 (Mon, 08 Oct 2007) | 3 lines
  #1123: fix the docs for the str.split(None, sep) case.
  Also expand a few other methods' docs, which had more info in the deprecated string module docs.
........
  r58369 | georg.brandl | 2007-10-08 01:06:05 -0700 (Mon, 08 Oct 2007) | 2 lines
  Update docstring of sched, also remove an unused assignment.
........
  r58370 | raymond.hettinger | 2007-10-08 02:14:28 -0700 (Mon, 08 Oct 2007) | 5 lines
  Add comments to NamedTuple code.
  Let the field spec be either a string or a non-string sequence (suggested by Martin Blais with use cases).
  Improve the error message in the case of a SyntaxError (caused by a duplicate field name).
........
  r58371 | raymond.hettinger | 2007-10-08 02:56:29 -0700 (Mon, 08 Oct 2007) | 1 line
  Missed a line in the docs
........
  r58372 | raymond.hettinger | 2007-10-08 03:11:51 -0700 (Mon, 08 Oct 2007) | 1 line
  Better variable names
........
  r58376 | georg.brandl | 2007-10-08 07:12:47 -0700 (Mon, 08 Oct 2007) | 3 lines
  #1199: docs for tp_as_{number,sequence,mapping}, by Amaury Forgeot d'Arc.
  No need to merge this to py3k!
........
  r58380 | raymond.hettinger | 2007-10-08 14:26:58 -0700 (Mon, 08 Oct 2007) | 1 line
  Eliminate camelcase function name
........
  r58381 | andrew.kuchling | 2007-10-08 16:23:03 -0700 (Mon, 08 Oct 2007) | 1 line
  Eliminate camelcase function name
........
  r58382 | raymond.hettinger | 2007-10-08 18:36:23 -0700 (Mon, 08 Oct 2007) | 1 line
  Make the error messages more specific
........
  r58384 | gregory.p.smith | 2007-10-08 23:02:21 -0700 (Mon, 08 Oct 2007) | 10 lines
  Splits Modules/_bsddb.c up into bsddb.h and _bsddb.c and adds a C API
  object available as bsddb.db.api.  This is based on the patch submitted
  by Duncan Grisby here:
    http://sourceforge.net/tracker/index.php?func=detail&aid=1551895&group_id=13900&atid=313900
  See this thread for additional info:
    http://sourceforge.net/mailarchive/forum.php?thread_name=E1GAVDK-0002rk-Iw%40apasphere.com&forum_name=pybsddb-users
  It also cleans up the code a little by removing some ifdef/endifs for
  python prior to 2.1 and for unsupported Berkeley DB <= 3.2.
........
  r58385 | gregory.p.smith | 2007-10-08 23:50:43 -0700 (Mon, 08 Oct 2007) | 5 lines
  Fix a double free when positioning a database cursor to a non-existant
  string key (and probably a few other situations with string keys).
  This was reported with a patch as pybsddb sourceforge bug 1708868 by
  jjjhhhlll at gmail.
........
  r58386 | gregory.p.smith | 2007-10-09 00:19:11 -0700 (Tue, 09 Oct 2007) | 3 lines
  Use the highest cPickle protocol in bsddb.dbshelve.  This comes from
  sourceforge pybsddb patch 1551443 by w_barnes.
........
  r58394 | gregory.p.smith | 2007-10-09 11:26:02 -0700 (Tue, 09 Oct 2007) | 2 lines
  remove another sleepycat reference
........
  r58396 | kurt.kaiser | 2007-10-09 12:31:30 -0700 (Tue, 09 Oct 2007) | 3 lines
  Allow interrupt only when executing user code in subprocess
  Patch 1225 Tal Einat modified from IDLE-Spoon.
........
  r58399 | brett.cannon | 2007-10-09 17:07:50 -0700 (Tue, 09 Oct 2007) | 5 lines
  Remove file-level typedefs that were inconsistently used throughout the file.
  Just move over to the public API names.
  Closes issue1238.
........
  r58401 | raymond.hettinger | 2007-10-09 17:26:46 -0700 (Tue, 09 Oct 2007) | 1 line
  Accept Jim Jewett's api suggestion to use None instead of -1 to indicate unbounded deques.
........
  r58403 | kurt.kaiser | 2007-10-09 17:55:40 -0700 (Tue, 09 Oct 2007) | 2 lines
  Allow cursor color change w/o restart. Patch 1725576 Tal Einat.
........
  r58404 | kurt.kaiser | 2007-10-09 18:06:47 -0700 (Tue, 09 Oct 2007) | 2 lines
  show paste if > 80 columns.  Patch 1659326 Tal Einat.
........
  r58415 | thomas.heller | 2007-10-11 12:51:32 -0700 (Thu, 11 Oct 2007) | 5 lines
  On OS X, use os.uname() instead of gestalt.sysv(...) to get the
  operating system version.  This allows to use ctypes when Python
  was configured with --disable-toolbox-glue.
........
  r58419 | neal.norwitz | 2007-10-11 20:01:01 -0700 (Thu, 11 Oct 2007) | 1 line
  Get rid of warning about not being able to create an existing directory.
........
  r58420 | neal.norwitz | 2007-10-11 20:01:30 -0700 (Thu, 11 Oct 2007) | 1 line
  Get rid of warnings on a bunch of platforms by using a proper prototype.
........
  r58421 | neal.norwitz | 2007-10-11 20:01:54 -0700 (Thu, 11 Oct 2007) | 4 lines
  Get rid of compiler warning about retval being used (returned) without
  being initialized.  (gcc warning and Coverity 202)
........
  r58422 | neal.norwitz | 2007-10-11 20:03:23 -0700 (Thu, 11 Oct 2007) | 1 line
  Fix Coverity 168:  Close the file before returning (exiting).
........
  r58423 | neal.norwitz | 2007-10-11 20:04:18 -0700 (Thu, 11 Oct 2007) | 4 lines
  Fix Coverity 180:  Don't overallocate.  We don't need structs, but pointers.
  Also fix a memory leak.
........
  r58424 | neal.norwitz | 2007-10-11 20:05:19 -0700 (Thu, 11 Oct 2007) | 5 lines
  Fix Coverity 185-186:  If the passed in FILE is NULL, uninitialized memory
  would be accessed.
  Will backport.
........
  r58425 | neal.norwitz | 2007-10-11 20:52:34 -0700 (Thu, 11 Oct 2007) | 1 line
  Get this module to compile with bsddb versions prior to 4.3
........
  r58430 | martin.v.loewis | 2007-10-12 01:56:52 -0700 (Fri, 12 Oct 2007) | 3 lines
  Bug #1216: Restore support for Visual Studio 2002.
  Will backport to 2.5.
........
  r58433 | raymond.hettinger | 2007-10-12 10:53:11 -0700 (Fri, 12 Oct 2007) | 1 line
  Fix test of count.__repr__() to ignore the 'L' if the count is a long
........
  r58434 | gregory.p.smith | 2007-10-12 11:44:06 -0700 (Fri, 12 Oct 2007) | 4 lines
  Fixes http://bugs.python.org/issue1233 - bsddb.dbshelve.DBShelf.append
  was useless due to inverted logic.  Also adds a test case for RECNO dbs
  to test_dbshelve.
........
  r58445 | georg.brandl | 2007-10-13 06:20:03 -0700 (Sat, 13 Oct 2007) | 2 lines
  Fix email example.
........
  r58450 | gregory.p.smith | 2007-10-13 16:02:05 -0700 (Sat, 13 Oct 2007) | 2 lines
  Fix an uncollectable reference leak in bsddb.db.DBShelf.append
........
  r58453 | neal.norwitz | 2007-10-13 17:18:40 -0700 (Sat, 13 Oct 2007) | 8 lines
  Let the O/S supply a port if none of the default ports can be used.
  This should make the tests more robust at the expense of allowing
  tests to be sloppier by not requiring them to cleanup after themselves.
  (It will legitamitely help when running two test suites simultaneously
  or if another process is already using one of the predefined ports.)
  Also simplifies (slightLy) the exception handling elsewhere.
........
  r58459 | neal.norwitz | 2007-10-14 11:30:21 -0700 (Sun, 14 Oct 2007) | 2 lines
  Don't raise a string exception, they don't work anymore.
........
  r58460 | neal.norwitz | 2007-10-14 11:40:37 -0700 (Sun, 14 Oct 2007) | 1 line
  Use unittest for assertions
........
  r58468 | armin.rigo | 2007-10-15 00:48:35 -0700 (Mon, 15 Oct 2007) | 2 lines
  test_bigbits was not testing what it seemed to.
........
  r58471 | guido.van.rossum | 2007-10-15 08:54:11 -0700 (Mon, 15 Oct 2007) | 3 lines
  Change a PyErr_Print() into a PyErr_Clear(),
  per discussion in issue 1031213.
........
  r58500 | raymond.hettinger | 2007-10-16 12:18:30 -0700 (Tue, 16 Oct 2007) | 1 line
  Improve error messages
........
  r58506 | raymond.hettinger | 2007-10-16 14:28:32 -0700 (Tue, 16 Oct 2007) | 1 line
  More docs, error messages, and tests
........
  r58507 | andrew.kuchling | 2007-10-16 15:58:03 -0700 (Tue, 16 Oct 2007) | 1 line
  Add items
........
  r58508 | brett.cannon | 2007-10-16 16:24:06 -0700 (Tue, 16 Oct 2007) | 3 lines
  Remove ``:const:`` notation on None in parameter list.  Since the markup is not
  rendered for parameters it just showed up as ``:const:`None` `` in the output.
........
  r58509 | brett.cannon | 2007-10-16 16:26:45 -0700 (Tue, 16 Oct 2007) | 3 lines
  Re-order some functions whose parameters differ between PyObject and const char
  * so that they are next to each other.
........
  r58522 | armin.rigo | 2007-10-17 11:46:37 -0700 (Wed, 17 Oct 2007) | 5 lines
  Fix the overflow checking of list_repeat.
  Introduce overflow checking into list_inplace_repeat.
  Backport candidate, possibly.
........
  r58530 | facundo.batista | 2007-10-17 20:16:03 -0700 (Wed, 17 Oct 2007) | 7 lines
  Issue #1580738.  When HTTPConnection reads the whole stream with read(),
  it closes itself.  When the stream is read in several calls to read(n),
  it should behave in the same way if HTTPConnection knows where the end
  of the stream is (through self.length).  Added a test case for this
  behaviour.
........
  r58531 | facundo.batista | 2007-10-17 20:44:48 -0700 (Wed, 17 Oct 2007) | 3 lines
  Issue 1289, just a typo.
........
  r58532 | gregory.p.smith | 2007-10-18 00:56:54 -0700 (Thu, 18 Oct 2007) | 4 lines
  cleanup test_dbtables to use mkdtemp.  cleanup dbtables to pass txn as a
  keyword argument whenever possible to avoid bugs and confusion.  (dbtables.py
  line 447 self.db.get using txn as a non-keyword was an actual bug due to this)
........
  r58533 | gregory.p.smith | 2007-10-18 01:34:20 -0700 (Thu, 18 Oct 2007) | 4 lines
  Fix a weird bug in dbtables: if it chose a random rowid string that contained
  NULL bytes it would cause the database all sorts of problems in the future
  leading to very strange random failures and corrupt dbtables.bsdTableDb dbs.
........
  r58534 | gregory.p.smith | 2007-10-18 09:32:02 -0700 (Thu, 18 Oct 2007) | 3 lines
  A cleaner fix than the one committed last night.  Generate random rowids that
  do not contain null bytes.
........
  r58537 | gregory.p.smith | 2007-10-18 10:17:57 -0700 (Thu, 18 Oct 2007) | 2 lines
  mention bsddb fixes.
........
  r58538 | raymond.hettinger | 2007-10-18 14:13:06 -0700 (Thu, 18 Oct 2007) | 1 line
  Remove useless warning
........
  r58539 | gregory.p.smith | 2007-10-19 00:31:20 -0700 (Fri, 19 Oct 2007) | 2 lines
  squelch the warning that this test is supposed to trigger.
........
  r58542 | georg.brandl | 2007-10-19 05:32:39 -0700 (Fri, 19 Oct 2007) | 2 lines
  Clarify wording for apply().
........
  r58544 | mark.summerfield | 2007-10-19 05:48:17 -0700 (Fri, 19 Oct 2007) | 3 lines
  Added a cross-ref to each other.
........
  r58545 | georg.brandl | 2007-10-19 10:38:49 -0700 (Fri, 19 Oct 2007) | 2 lines
  #1284: "S" means "seen", not unread.
........
  r58548 | thomas.heller | 2007-10-19 11:11:41 -0700 (Fri, 19 Oct 2007) | 4 lines
  Fix ctypes on 32-bit systems when Python is configured --with-system-ffi.
  See also https://bugs.launchpad.net/bugs/72505.
  Ported from release25-maint branch.
........
  r58550 | facundo.batista | 2007-10-19 12:25:57 -0700 (Fri, 19 Oct 2007) | 8 lines
  The constructor from tuple was way too permissive: it allowed bad
  coefficient numbers, floats in the sign, and other details that
  generated directly the wrong number in the best case, or triggered
  misfunctionality in the alorithms.
  Test cases added for these issues. Thanks Mark Dickinson.
........
  r58559 | georg.brandl | 2007-10-20 06:22:53 -0700 (Sat, 20 Oct 2007) | 2 lines
  Fix code being interpreted as a target.
........
  r58561 | georg.brandl | 2007-10-20 06:36:24 -0700 (Sat, 20 Oct 2007) | 2 lines
  Document new "cmdoption" directive.
........
  r58562 | georg.brandl | 2007-10-20 08:21:22 -0700 (Sat, 20 Oct 2007) | 2 lines
  Make a path more Unix-standardy.
........
  r58564 | georg.brandl | 2007-10-20 10:51:39 -0700 (Sat, 20 Oct 2007) | 2 lines
  Document new directive "envvar".
........
  r58567 | georg.brandl | 2007-10-20 11:08:14 -0700 (Sat, 20 Oct 2007) | 6 lines
  * Add new toplevel chapter, "Using Python." (how to install,
    configure and setup python on different platforms -- at least
    in theory.)
  * Move the Python on Mac docs in that chapter.
  * Add a new chapter about the command line invocation, by stargaming.
........
  r58568 | georg.brandl | 2007-10-20 11:33:20 -0700 (Sat, 20 Oct 2007) | 2 lines
  Change title, for now.
........
  r58569 | georg.brandl | 2007-10-20 11:39:25 -0700 (Sat, 20 Oct 2007) | 2 lines
  Add entry to ACKS.
........
  r58570 | georg.brandl | 2007-10-20 12:05:45 -0700 (Sat, 20 Oct 2007) | 2 lines
  Clarify -E docs.
........
  r58571 | georg.brandl | 2007-10-20 12:08:36 -0700 (Sat, 20 Oct 2007) | 2 lines
  Even more clarification.
........
  r58572 | andrew.kuchling | 2007-10-20 12:25:37 -0700 (Sat, 20 Oct 2007) | 1 line
  Fix protocol name
........
  r58573 | andrew.kuchling | 2007-10-20 12:35:18 -0700 (Sat, 20 Oct 2007) | 1 line
  Various items
........
  r58574 | andrew.kuchling | 2007-10-20 12:39:35 -0700 (Sat, 20 Oct 2007) | 1 line
  Use correct header line
........
  r58576 | armin.rigo | 2007-10-21 02:14:15 -0700 (Sun, 21 Oct 2007) | 3 lines
  Add a crasher for the long-standing issue with closing a file
  while another thread uses it.
........
  r58577 | georg.brandl | 2007-10-21 03:01:56 -0700 (Sun, 21 Oct 2007) | 2 lines
  Remove duplicate crasher.
........
  r58578 | georg.brandl | 2007-10-21 03:24:20 -0700 (Sun, 21 Oct 2007) | 2 lines
  Unify "byte code" to "bytecode". Also sprinkle :term: markup for it.
........
  r58579 | georg.brandl | 2007-10-21 03:32:54 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add markup to new function descriptions.
........
  r58580 | georg.brandl | 2007-10-21 03:45:46 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add :term:s for descriptors.
........
  r58581 | georg.brandl | 2007-10-21 03:46:24 -0700 (Sun, 21 Oct 2007) | 2 lines
  Unify "file-descriptor" to "file descriptor".
........
  r58582 | georg.brandl | 2007-10-21 03:52:38 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add :term: for generators.
........
  r58583 | georg.brandl | 2007-10-21 05:10:28 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add :term:s for iterator.
........
  r58584 | georg.brandl | 2007-10-21 05:15:05 -0700 (Sun, 21 Oct 2007) | 2 lines
  Add :term:s for "new-style class".
........
  r58588 | neal.norwitz | 2007-10-21 21:47:54 -0700 (Sun, 21 Oct 2007) | 1 line
  Add Chris Monson so he can edit PEPs.
........
  r58594 | guido.van.rossum | 2007-10-22 09:27:19 -0700 (Mon, 22 Oct 2007) | 4 lines
  Issue #1307, patch by Derek Shockey.
  When "MAIL" is received without args, an exception happens instead of
  sending a 501 syntax error response.
........
  r58598 | travis.oliphant | 2007-10-22 19:40:56 -0700 (Mon, 22 Oct 2007) | 1 line
  Add phuang patch from Issue 708374 which adds offset parameter to mmap module.
........
  r58601 | neal.norwitz | 2007-10-22 22:44:27 -0700 (Mon, 22 Oct 2007) | 2 lines
  Bug #1313, fix typo (wrong variable name) in example.
........
  r58609 | georg.brandl | 2007-10-23 11:21:35 -0700 (Tue, 23 Oct 2007) | 2 lines
  Update Pygments version from externals.
........
  r58618 | guido.van.rossum | 2007-10-23 12:25:41 -0700 (Tue, 23 Oct 2007) | 3 lines
  Issue 1307 by Derek Shockey, fox the same bug for RCPT.
  Neal: please backport!
........
  r58620 | raymond.hettinger | 2007-10-23 13:37:41 -0700 (Tue, 23 Oct 2007) | 1 line
  Shorter name for namedtuple()
........
  r58621 | andrew.kuchling | 2007-10-23 13:55:47 -0700 (Tue, 23 Oct 2007) | 1 line
  Update name
........
  r58622 | raymond.hettinger | 2007-10-23 14:23:07 -0700 (Tue, 23 Oct 2007) | 1 line
  Fixup news entry
........
  r58623 | raymond.hettinger | 2007-10-23 18:28:33 -0700 (Tue, 23 Oct 2007) | 1 line
  Optimize sum() for integer and float inputs.
........
  r58624 | raymond.hettinger | 2007-10-23 19:05:51 -0700 (Tue, 23 Oct 2007) | 1 line
  Fixup error return and add support for intermixed ints and floats/
........
  r58628 | vinay.sajip | 2007-10-24 03:47:06 -0700 (Wed, 24 Oct 2007) | 1 line
  Bug #1321: Fixed logic error in TimedRotatingFileHandler.__init__()
........
  r58641 | facundo.batista | 2007-10-24 12:11:08 -0700 (Wed, 24 Oct 2007) | 4 lines
  Issue 1290.  CharacterData.__repr__ was constructing a string
  in response that keeped having a non-ascii character.
........
  r58643 | thomas.heller | 2007-10-24 12:50:45 -0700 (Wed, 24 Oct 2007) | 1 line
  Added unittest for calling a function with paramflags (backport from py3k branch).
........
  r58645 | matthias.klose | 2007-10-24 13:00:44 -0700 (Wed, 24 Oct 2007) | 2 lines
  - Build using system ffi library on arm*-linux*.
........
  r58651 | georg.brandl | 2007-10-24 14:40:38 -0700 (Wed, 24 Oct 2007) | 2 lines
  Bug #1287: make os.environ.pop() work as expected.
........
  r58652 | raymond.hettinger | 2007-10-24 19:26:58 -0700 (Wed, 24 Oct 2007) | 1 line
  Missing DECREFs
........
  r58653 | matthias.klose | 2007-10-24 23:37:24 -0700 (Wed, 24 Oct 2007) | 2 lines
  - Build using system ffi library on arm*-linux*, pass --with-system-ffi to CONFIG_ARGS
........
  r58655 | thomas.heller | 2007-10-25 12:47:32 -0700 (Thu, 25 Oct 2007) | 2 lines
  ffi_type_longdouble may be already #defined.
  See issue 1324.
........
  r58656 | kurt.kaiser | 2007-10-25 15:43:45 -0700 (Thu, 25 Oct 2007) | 3 lines
  Correct an ancient bug in an unused path by removing that path: register() is
  now idempotent.
........
  r58660 | kurt.kaiser | 2007-10-25 17:10:09 -0700 (Thu, 25 Oct 2007) | 4 lines
  1. Add comments to provide top-level documentation.
  2. Refactor to use more descriptive names.
  3. Enhance tests in main().
........
  r58675 | georg.brandl | 2007-10-26 11:30:41 -0700 (Fri, 26 Oct 2007) | 2 lines
  Fix new pop() method on os.environ on ignorecase-platforms.
........
  r58696 | neal.norwitz | 2007-10-27 15:32:21 -0700 (Sat, 27 Oct 2007) | 1 line
  Update URL for Pygments.  0.8.1 is no longer available
........
  r58697 | hyeshik.chang | 2007-10-28 04:19:02 -0700 (Sun, 28 Oct 2007) | 3 lines
  - Add support for FreeBSD 8 which is recently forked from FreeBSD 7.
  - Regenerate IN module for most recent maintenance tree of FreeBSD 6 and 7.
........
  r58698 | hyeshik.chang | 2007-10-28 05:38:09 -0700 (Sun, 28 Oct 2007) | 2 lines
  Enable platform-specific tweaks for FreeBSD 8 (exactly same to FreeBSD 7's yet)
........
  r58700 | kurt.kaiser | 2007-10-28 12:03:59 -0700 (Sun, 28 Oct 2007) | 2 lines
  Add confirmation dialog before printing.  Patch 1717170 Tal Einat.
........
  r58706 | guido.van.rossum | 2007-10-29 13:52:45 -0700 (Mon, 29 Oct 2007) | 3 lines
  Patch 1353 by Jacob Winther.
  Add mp4 mapping to mimetypes.py.
........
  r58709 | guido.van.rossum | 2007-10-29 15:15:05 -0700 (Mon, 29 Oct 2007) | 6 lines
  Backport fixes for the code that decodes octal escapes (and for PyString
  also hex escapes) -- this was reaching beyond the end of the input string
  buffer, even though it is not supposed to be \0-terminated.
  This has no visible effect but is clearly the correct thing to do.
  (In 3.0 it had a visible effect after removing ob_sstate from PyString.)
........
  r58710 | kurt.kaiser | 2007-10-29 19:38:54 -0700 (Mon, 29 Oct 2007) | 7 lines
  check in Tal Einat's update to tabpage.py
  Patch 1612746
  M    configDialog.py
  M    NEWS.txt
  AM   tabbedpages.py
........
  r58715 | georg.brandl | 2007-10-30 10:51:18 -0700 (Tue, 30 Oct 2007) | 2 lines
  Use correct markup.
........
  r58716 | georg.brandl | 2007-10-30 10:57:12 -0700 (Tue, 30 Oct 2007) | 2 lines
  Make example about hiding None return values at the prompt clearer.
........
  r58728 | neal.norwitz | 2007-10-30 23:33:20 -0700 (Tue, 30 Oct 2007) | 1 line
  Fix some compiler warnings for signed comparisons on Unix and Windows.
........
  r58731 | martin.v.loewis | 2007-10-31 10:19:33 -0700 (Wed, 31 Oct 2007) | 2 lines
  Adding Christian Heimes.
........
  r58737 | raymond.hettinger | 2007-10-31 14:57:58 -0700 (Wed, 31 Oct 2007) | 1 line
  Clarify the reasons why pickle is almost always better than marshal
........
  r58739 | raymond.hettinger | 2007-10-31 15:15:49 -0700 (Wed, 31 Oct 2007) | 1 line
  Sets are marshalable.
........
											
										 
											2007-11-01 19:42:39 +00:00
										 |  |  | 	Py_LeaveRecursiveCall(); | 
					
						
							| 
									
										
										
										
											2000-03-10 22:55:18 +00:00
										 |  |  | 	if (res == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  | 	if (!PyUnicode_Check(res)) { | 
					
						
							| 
									
										
										
										
											2005-08-12 17:34:58 +00:00
										 |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "__str__ returned non-string (type %.200s)", | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 			     Py_TYPE(res)->tp_name); | 
					
						
							| 
									
										
										
										
											2005-08-12 17:34:58 +00:00
										 |  |  | 		Py_DECREF(res); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return res; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-11 18:37:52 +00:00
										 |  |  | PyObject * | 
					
						
							|  |  |  | PyObject_ASCII(PyObject *v) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *repr, *ascii, *res; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	repr = PyObject_Repr(v); | 
					
						
							|  |  |  | 	if (repr == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* repr is guaranteed to be a PyUnicode object by PyObject_Repr */ | 
					
						
							|  |  |  | 	ascii = PyUnicode_EncodeASCII( | 
					
						
							|  |  |  | 		PyUnicode_AS_UNICODE(repr), | 
					
						
							|  |  |  | 		PyUnicode_GET_SIZE(repr), | 
					
						
							|  |  |  | 		"backslashreplace"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Py_DECREF(repr); | 
					
						
							|  |  |  | 	if (ascii == NULL)  | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	res = PyUnicode_DecodeASCII( | 
					
						
							|  |  |  | 		PyBytes_AS_STRING(ascii), | 
					
						
							|  |  |  | 		PyBytes_GET_SIZE(ascii), | 
					
						
							|  |  |  | 		NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Py_DECREF(ascii); | 
					
						
							|  |  |  | 	return res; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
											  
											
												Changes to recursive-object comparisons, having to do with a test case
I found where rich comparison of unequal recursive objects gave
unintuituve results.  In a discussion with Tim, where we discovered
that our intuition on when a<=b should be true was failing, we decided
to outlaw ordering comparisons on recursive objects.  (Once we have
fixed our intuition and designed a matching algorithm that's practical
and reasonable to implement, we can allow such orderings again.)
- Refactored the recursive-object comparison framework; more is now
  done in the support routines so less needs to be done in the calling
  routines (even at the expense of slowing it down a bit -- this
  should normally never be invoked, it's mostly just there to avoid
  blowing up the interpreter).
- Changed the framework so that the comparison operator used is also
  stored.  (The dictionary now stores triples (v, w, op) instead of
  pairs (v, w).)
- Changed the nesting limit to a more reasonable small 20; this only
  slows down comparisons of very deeply nested objects (unlikely to
  occur in practice), while speeding up comparisons of recursive
  objects (previously, this would first waste time and space on 500
  nested comparisons before it would start detecting recursion).
- Changed rich comparisons for recursive objects to raise a ValueError
  exception when recursion is detected for ordering oprators (<, <=,
  >, >=).
Unrelated change:
- Moved PyObject_Unicode() to just under PyObject_Str(), where it
  belongs.  MAL's patch must've inserted in a random spot between two
  functions in the file -- between two helpers for rich comparison...
											
										 
											2001-01-18 22:07:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-26 16:46:47 +00:00
										 |  |  | PyObject * | 
					
						
							|  |  |  | PyObject_Bytes(PyObject *v) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2008-08-28 11:28:26 +00:00
										 |  |  | 	PyObject *result, *func; | 
					
						
							| 
									
										
										
										
											2008-08-26 16:46:47 +00:00
										 |  |  | 	static PyObject *bytesstring = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (v == NULL) | 
					
						
							|  |  |  | 		return PyBytes_FromString("<NULL>"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyBytes_CheckExact(v)) { | 
					
						
							|  |  |  | 		Py_INCREF(v); | 
					
						
							|  |  |  | 		return v; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-08 03:25:19 +00:00
										 |  |  | 	func = _PyObject_LookupSpecial(v, "__bytes__", &bytesstring); | 
					
						
							| 
									
										
										
										
											2008-08-26 16:46:47 +00:00
										 |  |  | 	if (func != NULL) { | 
					
						
							| 
									
										
										
										
											2009-05-08 03:27:59 +00:00
										 |  |  |             result = PyObject_CallFunctionObjArgs(func, NULL); | 
					
						
							| 
									
										
										
										
											2009-05-08 03:25:19 +00:00
										 |  |  | 	    Py_DECREF(func); | 
					
						
							| 
									
										
										
										
											2008-08-26 16:46:47 +00:00
										 |  |  |             if (result == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  |             if (!PyBytes_Check(result)) { | 
					
						
							|  |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "__bytes__ returned non-bytes (type %.200s)", | 
					
						
							|  |  |  | 			     Py_TYPE(result)->tp_name); | 
					
						
							|  |  |  | 		Py_DECREF(result); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             return result; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2009-05-25 03:10:48 +00:00
										 |  |  | 	else if (PyErr_Occurred()) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											2008-08-26 16:46:47 +00:00
										 |  |  | 	return PyBytes_FromObject(v); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-01 13:59:22 +00:00
										 |  |  | /* For Python 3.0.1 and later, the old three-way comparison has been
 | 
					
						
							|  |  |  |    completely removed in favour of rich comparisons.  PyObject_Compare() and | 
					
						
							|  |  |  |    PyObject_Cmp() are gone, and the builtin cmp function no longer exists. | 
					
						
							| 
									
										
										
										
											2009-02-02 20:36:42 +00:00
										 |  |  |    The old tp_compare slot has been renamed to tp_reserved, and should no | 
					
						
							| 
									
										
										
										
											2009-02-01 13:59:22 +00:00
										 |  |  |    longer be used.  Use tp_richcompare instead. | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  |    See (*) below for practical amendments. | 
					
						
							| 
									
										
										
										
											2002-05-31 20:03:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-01 13:59:22 +00:00
										 |  |  |    tp_richcompare gets called with a first argument of the appropriate type | 
					
						
							|  |  |  |    and a second object of an arbitrary type.  We never do any kind of | 
					
						
							|  |  |  |    coercion. | 
					
						
							| 
									
										
										
										
											2002-05-31 20:03:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-01 13:59:22 +00:00
										 |  |  |    The tp_richcompare slot should return an object, as follows: | 
					
						
							| 
									
										
										
										
											2001-01-17 21:27:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  |     NULL if an exception occurred | 
					
						
							|  |  |  |     NotImplemented if the requested comparison is not implemented | 
					
						
							|  |  |  |     any other false value if the requested comparison is false | 
					
						
							|  |  |  |     any other true value if the requested comparison is true | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  |   The PyObject_RichCompare[Bool]() wrappers raise TypeError when they get | 
					
						
							|  |  |  |   NotImplemented. | 
					
						
							| 
									
										
										
										
											2001-01-04 01:48:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  |   (*) Practical amendments: | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  |   - If rich comparison returns NotImplemented, == and != are decided by | 
					
						
							|  |  |  |     comparing the object pointer (i.e. falling back to the base object | 
					
						
							|  |  |  |     implementation). | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2001-01-22 19:28:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | /* Map rich comparison operators to their swapped version, e.g. LT <--> GT */ | 
					
						
							|  |  |  | int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE}; | 
					
						
							| 
									
										
										
										
											2001-06-09 07:34:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-12-19 21:35:46 +00:00
										 |  |  | static char *opstrings[] = {"<", "<=", "==", "!=", ">", ">="}; | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | /* Perform a rich comparison, raising TypeError when the requested comparison
 | 
					
						
							|  |  |  |    operator is not supported. */ | 
					
						
							| 
									
										
										
										
											2001-01-21 16:25:18 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | do_richcompare(PyObject *v, PyObject *w, int op) | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | 	richcmpfunc f; | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | 	PyObject *res; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | 	if (v->ob_type != w->ob_type && | 
					
						
							|  |  |  | 	    PyType_IsSubtype(w->ob_type, v->ob_type) && | 
					
						
							|  |  |  | 	    (f = w->ob_type->tp_richcompare) != NULL) { | 
					
						
							|  |  |  | 		res = (*f)(w, v, _Py_SwappedOp[op]); | 
					
						
							|  |  |  | 		if (res != Py_NotImplemented) | 
					
						
							|  |  |  | 			return res; | 
					
						
							|  |  |  | 		Py_DECREF(res); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if ((f = v->ob_type->tp_richcompare) != NULL) { | 
					
						
							|  |  |  | 		res = (*f)(v, w, op); | 
					
						
							|  |  |  | 		if (res != Py_NotImplemented) | 
					
						
							|  |  |  | 			return res; | 
					
						
							|  |  |  | 		Py_DECREF(res); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if ((f = w->ob_type->tp_richcompare) != NULL) { | 
					
						
							|  |  |  | 		res = (*f)(w, v, _Py_SwappedOp[op]); | 
					
						
							|  |  |  | 		if (res != Py_NotImplemented) | 
					
						
							|  |  |  | 			return res; | 
					
						
							|  |  |  | 		Py_DECREF(res); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	/* If neither object implements it, provide a sensible default
 | 
					
						
							|  |  |  | 	   for == and !=, but raise an exception for ordering. */ | 
					
						
							|  |  |  | 	switch (op) { | 
					
						
							|  |  |  | 	case Py_EQ: | 
					
						
							|  |  |  | 		res = (v == w) ? Py_True : Py_False; | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	case Py_NE: | 
					
						
							|  |  |  | 		res = (v != w) ? Py_True : Py_False; | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	default: | 
					
						
							| 
									
										
										
										
											2006-12-19 21:35:46 +00:00
										 |  |  | 		/* XXX Special-case None so it doesn't show as NoneType() */ | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "unorderable types: %.100s() %s %.100s()", | 
					
						
							|  |  |  | 			     v->ob_type->tp_name, | 
					
						
							|  |  |  | 			     opstrings[op], | 
					
						
							|  |  |  | 			     w->ob_type->tp_name); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	Py_INCREF(res); | 
					
						
							|  |  |  | 	return res; | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | /* Perform a rich comparison with object result.  This wraps do_richcompare()
 | 
					
						
							|  |  |  |    with a check for NULL arguments and a recursion check. */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | PyObject * | 
					
						
							|  |  |  | PyObject_RichCompare(PyObject *v, PyObject *w, int op) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *res; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	assert(Py_LT <= op && op <= Py_GE); | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | 	if (v == NULL || w == NULL) { | 
					
						
							|  |  |  | 		if (!PyErr_Occurred()) | 
					
						
							|  |  |  | 			PyErr_BadInternalCall(); | 
					
						
							| 
									
										
										
										
											2003-10-28 12:05:48 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | 	if (Py_EnterRecursiveCall(" in cmp")) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	res = do_richcompare(v, w, op); | 
					
						
							| 
									
										
										
										
											2003-10-28 12:05:48 +00:00
										 |  |  | 	Py_LeaveRecursiveCall(); | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | 	return res; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | /* Perform a rich comparison with integer result.  This wraps
 | 
					
						
							|  |  |  |    PyObject_RichCompare(), returning -1 for error, 0 for false, 1 for true. */ | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | int | 
					
						
							|  |  |  | PyObject_RichCompareBool(PyObject *v, PyObject *w, int op) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2004-03-21 17:01:44 +00:00
										 |  |  | 	PyObject *res; | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | 	int ok; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-12 23:23:36 +00:00
										 |  |  | 	/* Quick result when objects are the same.
 | 
					
						
							|  |  |  | 	   Guarantees that identity implies equality. */ | 
					
						
							|  |  |  | 	if (v == w) { | 
					
						
							|  |  |  | 		if (op == Py_EQ) | 
					
						
							|  |  |  | 			return 1; | 
					
						
							|  |  |  | 		else if (op == Py_NE) | 
					
						
							|  |  |  | 			return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-03-21 17:01:44 +00:00
										 |  |  | 	res = PyObject_RichCompare(v, w, op); | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | 	if (res == NULL) | 
					
						
							|  |  |  | 		return -1; | 
					
						
							| 
									
										
										
										
											2002-08-24 05:33:28 +00:00
										 |  |  | 	if (PyBool_Check(res)) | 
					
						
							|  |  |  | 		ok = (res == Py_True); | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		ok = PyObject_IsTrue(res); | 
					
						
							| 
									
										
										
										
											2001-01-17 15:24:28 +00:00
										 |  |  | 	Py_DECREF(res); | 
					
						
							|  |  |  | 	return ok; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2000-06-29 19:17:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Set of hash utility functions to help maintaining the invariant that
 | 
					
						
							| 
									
										
										
										
											2004-03-21 17:35:06 +00:00
										 |  |  | 	if a==b then hash(a)==hash(b) | 
					
						
							| 
									
										
										
										
											2000-06-29 19:17:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    All the utility functions (_Py_Hash*()) return "-1" to signify an error. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | long | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _Py_HashDouble(double v) | 
					
						
							| 
									
										
										
										
											2000-06-29 19:17:04 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2000-08-15 03:34:48 +00:00
										 |  |  | 	double intpart, fractpart; | 
					
						
							|  |  |  | 	int expo; | 
					
						
							|  |  |  | 	long hipart; | 
					
						
							|  |  |  | 	long x;		/* the final hash value */ | 
					
						
							|  |  |  | 	/* This is designed so that Python numbers of different types
 | 
					
						
							|  |  |  | 	 * that compare equal hash to the same value; otherwise comparisons | 
					
						
							|  |  |  | 	 * of mapping keys will turn out weird. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fractpart = modf(v, &intpart); | 
					
						
							|  |  |  | 	if (fractpart == 0.0) { | 
					
						
							|  |  |  | 		/* This must return the same hash as an equal int or long. */ | 
					
						
							| 
									
										
										
										
											2009-02-08 15:09:21 +00:00
										 |  |  | 		if (intpart > LONG_MAX/2 || -intpart > LONG_MAX/2) { | 
					
						
							| 
									
										
										
										
											2000-08-15 03:34:48 +00:00
										 |  |  | 			/* Convert to long and use its hash. */ | 
					
						
							|  |  |  | 			PyObject *plong;	/* converted to Python long */ | 
					
						
							|  |  |  | 			if (Py_IS_INFINITY(intpart)) | 
					
						
							|  |  |  | 				/* can't convert to long int -- arbitrary */ | 
					
						
							|  |  |  | 				v = v < 0 ? -271828.0 : 314159.0; | 
					
						
							|  |  |  | 			plong = PyLong_FromDouble(v); | 
					
						
							|  |  |  | 			if (plong == NULL) | 
					
						
							|  |  |  | 				return -1; | 
					
						
							|  |  |  | 			x = PyObject_Hash(plong); | 
					
						
							|  |  |  | 			Py_DECREF(plong); | 
					
						
							|  |  |  | 			return x; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		/* Fits in a C long == a Python int, so is its own hash. */ | 
					
						
							|  |  |  | 		x = (long)intpart; | 
					
						
							|  |  |  | 		if (x == -1) | 
					
						
							|  |  |  | 			x = -2; | 
					
						
							|  |  |  | 		return x; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	/* The fractional part is non-zero, so we don't have to worry about
 | 
					
						
							|  |  |  | 	 * making this match the hash of some other type. | 
					
						
							|  |  |  | 	 * Use frexp to get at the bits in the double. | 
					
						
							| 
									
										
										
										
											2000-06-29 19:17:04 +00:00
										 |  |  | 	 * Since the VAX D double format has 56 mantissa bits, which is the | 
					
						
							|  |  |  | 	 * most of any double format in use, each of these parts may have as | 
					
						
							|  |  |  | 	 * many as (but no more than) 56 significant bits. | 
					
						
							| 
									
										
										
										
											2000-08-15 03:34:48 +00:00
										 |  |  | 	 * So, assuming sizeof(long) >= 4, each part can be broken into two | 
					
						
							|  |  |  | 	 * longs; frexp and multiplication are used to do that. | 
					
						
							|  |  |  | 	 * Also, since the Cray double format has 15 exponent bits, which is | 
					
						
							|  |  |  | 	 * the most of any double format in use, shifting the exponent field | 
					
						
							|  |  |  | 	 * left by 15 won't overflow a long (again assuming sizeof(long) >= 4). | 
					
						
							| 
									
										
										
										
											2000-06-29 19:17:04 +00:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2000-08-15 03:34:48 +00:00
										 |  |  | 	v = frexp(v, &expo); | 
					
						
							|  |  |  | 	v *= 2147483648.0;	/* 2**31 */ | 
					
						
							|  |  |  | 	hipart = (long)v;	/* take the top 32 bits */ | 
					
						
							|  |  |  | 	v = (v - (double)hipart) * 2147483648.0; /* get the next 32 bits */ | 
					
						
							|  |  |  | 	x = hipart + (long)v + (expo << 15); | 
					
						
							|  |  |  | 	if (x == -1) | 
					
						
							|  |  |  | 		x = -2; | 
					
						
							|  |  |  | 	return x; | 
					
						
							| 
									
										
										
										
											2000-06-29 19:17:04 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | long | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _Py_HashPointer(void *p) | 
					
						
							| 
									
										
										
										
											2000-06-29 19:17:04 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	long x; | 
					
						
							| 
									
										
										
										
											2009-02-13 14:01:05 +00:00
										 |  |  | 	size_t y = (size_t)p; | 
					
						
							|  |  |  | 	/* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid
 | 
					
						
							|  |  |  | 	   excessive hash collisions for dicts and sets */ | 
					
						
							|  |  |  | 	y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4)); | 
					
						
							|  |  |  | 	x = (long)y; | 
					
						
							|  |  |  | 	if (x == -1) | 
					
						
							|  |  |  | 		x = -2; | 
					
						
							| 
									
										
										
										
											2000-06-29 19:17:04 +00:00
										 |  |  | 	return x; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-15 15:46:38 +00:00
										 |  |  | long | 
					
						
							|  |  |  | PyObject_HashNotImplemented(PyObject *v) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'", | 
					
						
							|  |  |  | 		     Py_TYPE(v)->tp_name); | 
					
						
							|  |  |  | 	return -1; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2000-06-29 19:17:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-03-29 10:43:31 +00:00
										 |  |  | long | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyObject_Hash(PyObject *v) | 
					
						
							| 
									
										
										
										
											1993-03-29 10:43:31 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2008-07-15 15:46:38 +00:00
										 |  |  | 	PyTypeObject *tp = Py_TYPE(v); | 
					
						
							| 
									
										
										
										
											1993-03-29 10:43:31 +00:00
										 |  |  | 	if (tp->tp_hash != NULL) | 
					
						
							|  |  |  | 		return (*tp->tp_hash)(v); | 
					
						
							| 
									
										
										
										
											2008-12-30 07:29:12 +00:00
										 |  |  | 	/* To keep to the general practice that inheriting
 | 
					
						
							|  |  |  | 	 * solely from object in C code should work without | 
					
						
							|  |  |  | 	 * an explicit call to PyType_Ready, we implicitly call | 
					
						
							|  |  |  | 	 * PyType_Ready here and then check the tp_hash slot again | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	if (tp->tp_dict == NULL) { | 
					
						
							|  |  |  | 		if (PyType_Ready(tp) < 0) | 
					
						
							|  |  |  | 			return -1; | 
					
						
							|  |  |  | 		if (tp->tp_hash != NULL) | 
					
						
							|  |  |  | 			return (*tp->tp_hash)(v); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2006-08-17 05:42:55 +00:00
										 |  |  | 	/* Otherwise, the object can't be hashed */ | 
					
						
							| 
									
										
										
										
											2008-07-15 15:46:38 +00:00
										 |  |  | 	return PyObject_HashNotImplemented(v); | 
					
						
							| 
									
										
										
										
											1993-03-29 10:43:31 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | PyObject * | 
					
						
							| 
									
										
										
										
											2005-12-10 18:50:16 +00:00
										 |  |  | PyObject_GetAttrString(PyObject *v, const char *name) | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	PyObject *w, *res; | 
					
						
							| 
									
										
										
										
											1996-08-09 20:52:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	if (Py_TYPE(v)->tp_getattr != NULL) | 
					
						
							|  |  |  | 		return (*Py_TYPE(v)->tp_getattr)(v, (char*)name); | 
					
						
							| 
									
										
										
										
											2007-06-10 09:51:05 +00:00
										 |  |  | 	w = PyUnicode_InternFromString(name); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	if (w == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	res = PyObject_GetAttr(v, w); | 
					
						
							|  |  |  | 	Py_XDECREF(w); | 
					
						
							|  |  |  | 	return res; | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-07-11 19:55:34 +00:00
										 |  |  | int | 
					
						
							| 
									
										
										
										
											2005-12-10 18:50:16 +00:00
										 |  |  | PyObject_HasAttrString(PyObject *v, const char *name) | 
					
						
							| 
									
										
										
										
											1993-07-11 19:55:34 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 	PyObject *res = PyObject_GetAttrString(v, name); | 
					
						
							| 
									
										
										
										
											1993-07-11 19:55:34 +00:00
										 |  |  | 	if (res != NULL) { | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 		Py_DECREF(res); | 
					
						
							| 
									
										
										
										
											1993-07-11 19:55:34 +00:00
										 |  |  | 		return 1; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 	PyErr_Clear(); | 
					
						
							| 
									
										
										
										
											1993-07-11 19:55:34 +00:00
										 |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | int | 
					
						
							| 
									
										
										
										
											2005-12-10 18:50:16 +00:00
										 |  |  | PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w) | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	PyObject *s; | 
					
						
							|  |  |  | 	int res; | 
					
						
							| 
									
										
										
										
											1996-08-09 20:52:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	if (Py_TYPE(v)->tp_setattr != NULL) | 
					
						
							|  |  |  | 		return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w); | 
					
						
							| 
									
										
										
										
											2007-06-10 09:51:05 +00:00
										 |  |  | 	s = PyUnicode_InternFromString(name); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	if (s == NULL) | 
					
						
							|  |  |  | 		return -1; | 
					
						
							|  |  |  | 	res = PyObject_SetAttr(v, s, w); | 
					
						
							|  |  |  | 	Py_XDECREF(s); | 
					
						
							|  |  |  | 	return res; | 
					
						
							| 
									
										
										
										
											1993-05-12 08:24:20 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-20 18:34:44 +00:00
										 |  |  | PyObject * | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyObject_GetAttr(PyObject *v, PyObject *name) | 
					
						
							| 
									
										
										
										
											1997-05-20 18:34:44 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	PyTypeObject *tp = Py_TYPE(v); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												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
										 |  |  |  	if (!PyUnicode_Check(name)) { | 
					
						
							| 
									
										
										
										
											2007-06-10 09:51:05 +00:00
										 |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "attribute name must be string, not '%.200s'", | 
					
						
							|  |  |  | 			     name->ob_type->tp_name); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											2000-06-23 14:36:32 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	if (tp->tp_getattro != NULL) | 
					
						
							|  |  |  | 		return (*tp->tp_getattro)(v, name); | 
					
						
							|  |  |  | 	if (tp->tp_getattr != NULL) | 
					
						
							| 
									
										
										
										
											2008-08-07 18:54:33 +00:00
										 |  |  | 		return (*tp->tp_getattr)(v, _PyUnicode_AsString(name)); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	PyErr_Format(PyExc_AttributeError, | 
					
						
							| 
									
										
										
										
											2007-06-11 15:37:20 +00:00
										 |  |  | 		     "'%.50s' object has no attribute '%U'", | 
					
						
							|  |  |  | 		     tp->tp_name, name); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	return NULL; | 
					
						
							| 
									
										
										
										
											1997-05-20 18:34:44 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyObject_HasAttr(PyObject *v, PyObject *name) | 
					
						
							| 
									
										
										
										
											1997-05-20 18:34:44 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	PyObject *res = PyObject_GetAttr(v, name); | 
					
						
							|  |  |  | 	if (res != NULL) { | 
					
						
							|  |  |  | 		Py_DECREF(res); | 
					
						
							|  |  |  | 		return 1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	PyErr_Clear(); | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value) | 
					
						
							| 
									
										
										
										
											1997-05-20 18:34:44 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	PyTypeObject *tp = Py_TYPE(v); | 
					
						
							| 
									
										
										
										
											1997-05-20 18:34:44 +00:00
										 |  |  | 	int err; | 
					
						
							| 
									
										
										
										
											2000-09-18 16:20:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-06-10 09:51:05 +00:00
										 |  |  | 	if (!PyUnicode_Check(name)) { | 
					
						
							|  |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "attribute name must be string, not '%.200s'", | 
					
						
							|  |  |  | 			     name->ob_type->tp_name); | 
					
						
							|  |  |  | 		return -1; | 
					
						
							| 
									
										
										
										
											2000-06-23 14:36:32 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-05-04 00:41:39 +00:00
										 |  |  | 	Py_INCREF(name); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-06-10 09:51:05 +00:00
										 |  |  | 	PyUnicode_InternInPlace(&name); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	if (tp->tp_setattro != NULL) { | 
					
						
							|  |  |  | 		err = (*tp->tp_setattro)(v, name, value); | 
					
						
							|  |  |  | 		Py_DECREF(name); | 
					
						
							|  |  |  | 		return err; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (tp->tp_setattr != NULL) { | 
					
						
							| 
									
										
										
										
											2008-08-07 18:54:33 +00:00
										 |  |  | 		err = (*tp->tp_setattr)(v, _PyUnicode_AsString(name), value); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 		Py_DECREF(name); | 
					
						
							|  |  |  | 		return err; | 
					
						
							| 
									
										
										
										
											2000-09-18 16:20:57 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-05-20 18:34:44 +00:00
										 |  |  | 	Py_DECREF(name); | 
					
						
							| 
									
										
										
										
											2007-05-04 00:41:39 +00:00
										 |  |  | 	assert(name->ob_refcnt >= 1); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	if (tp->tp_getattr == NULL && tp->tp_getattro == NULL) | 
					
						
							|  |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "'%.100s' object has no attributes " | 
					
						
							| 
									
										
										
										
											2007-06-11 15:37:20 +00:00
										 |  |  | 			     "(%s .%U)", | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 			     tp->tp_name, | 
					
						
							|  |  |  | 			     value==NULL ? "del" : "assign to", | 
					
						
							| 
									
										
										
										
											2007-06-11 15:37:20 +00:00
										 |  |  | 			     name); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	else | 
					
						
							|  |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "'%.100s' object has only read-only attributes " | 
					
						
							| 
									
										
										
										
											2007-06-11 15:37:20 +00:00
										 |  |  | 			     "(%s .%U)", | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 			     tp->tp_name, | 
					
						
							|  |  |  | 			     value==NULL ? "del" : "assign to", | 
					
						
							| 
									
										
										
										
											2007-06-11 15:37:20 +00:00
										 |  |  | 			     name); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	return -1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Helper to get a pointer to an object's __dict__ slot, if any */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PyObject ** | 
					
						
							|  |  |  | _PyObject_GetDictPtr(PyObject *obj) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2006-03-07 12:08:51 +00:00
										 |  |  | 	Py_ssize_t dictoffset; | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	PyTypeObject *tp = Py_TYPE(obj); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dictoffset = tp->tp_dictoffset; | 
					
						
							|  |  |  | 	if (dictoffset == 0) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if (dictoffset < 0) { | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | 		Py_ssize_t tsize; | 
					
						
							| 
									
										
										
										
											2002-03-01 22:24:49 +00:00
										 |  |  | 		size_t size; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		tsize = ((PyVarObject *)obj)->ob_size; | 
					
						
							|  |  |  | 		if (tsize < 0) | 
					
						
							|  |  |  | 			tsize = -tsize; | 
					
						
							|  |  |  | 		size = _PyObject_VAR_SIZE(tp, tsize); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-06 21:27:34 +00:00
										 |  |  | 		dictoffset += (long)size; | 
					
						
							|  |  |  | 		assert(dictoffset > 0); | 
					
						
							|  |  |  | 		assert(dictoffset % SIZEOF_VOID_P == 0); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return (PyObject **) ((char *)obj + dictoffset); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-17 08:24:35 +00:00
										 |  |  | PyObject * | 
					
						
							| 
									
										
										
										
											2003-03-17 19:46:11 +00:00
										 |  |  | PyObject_SelfIter(PyObject *obj) | 
					
						
							| 
									
										
										
										
											2003-03-17 08:24:35 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	Py_INCREF(obj); | 
					
						
							|  |  |  | 	return obj; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-12 23:58:21 +00:00
										 |  |  | /* Helper used when the __next__ method is removed from a type:
 | 
					
						
							|  |  |  |    tp_iternext is never NULL and can be safely called without checking | 
					
						
							|  |  |  |    on every iteration. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PyObject * | 
					
						
							|  |  |  | _PyObject_NextNotImplemented(PyObject *self) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 		     "'%.200s' object is not iterable", | 
					
						
							|  |  |  | 		     Py_TYPE(self)->tp_name); | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-14 17:09:47 +00:00
										 |  |  | /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | PyObject * | 
					
						
							|  |  |  | PyObject_GenericGetAttr(PyObject *obj, PyObject *name) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	PyTypeObject *tp = Py_TYPE(obj); | 
					
						
							| 
									
										
										
										
											2002-08-19 19:22:50 +00:00
										 |  |  | 	PyObject *descr = NULL; | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 	PyObject *res = NULL; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	descrgetfunc f; | 
					
						
							| 
									
										
										
										
											2006-03-07 12:08:51 +00:00
										 |  |  | 	Py_ssize_t dictoffset; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	PyObject **dictptr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-06-10 09:51:05 +00:00
										 |  |  | 	if (!PyUnicode_Check(name)){ | 
					
						
							|  |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "attribute name must be string, not '%.200s'", | 
					
						
							|  |  |  | 			     name->ob_type->tp_name); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		Py_INCREF(name); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	if (tp->tp_dict == NULL) { | 
					
						
							| 
									
										
										
										
											2001-08-07 17:24:28 +00:00
										 |  |  | 		if (PyType_Ready(tp) < 0) | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 			goto done; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 59921-59932 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r59923 | raymond.hettinger | 2008-01-11 19:04:55 +0100 (Fri, 11 Jan 2008) | 1 line
  Speed-up and simplify code urlparse's result objects.
........
  r59924 | andrew.kuchling | 2008-01-11 20:33:24 +0100 (Fri, 11 Jan 2008) | 1 line
  Bug #1790: update link; remove outdated paragraph
........
  r59925 | thomas.heller | 2008-01-11 20:34:06 +0100 (Fri, 11 Jan 2008) | 5 lines
  Raise an error instead of crashing with a segfault when a NULL
  function pointer is called.
  Will backport to release25-maint.
........
  r59927 | thomas.heller | 2008-01-11 21:29:19 +0100 (Fri, 11 Jan 2008) | 4 lines
  Fix a potential 'SystemError: NULL result without error'.
  NULL may be a valid return value from PyLong_AsVoidPtr.
  Will backport to release25-maint.
........
  r59928 | raymond.hettinger | 2008-01-12 00:25:18 +0100 (Sat, 12 Jan 2008) | 1 line
  Update the opcode docs for STORE_MAP and BUILD_MAP
........
  r59929 | mark.dickinson | 2008-01-12 02:56:00 +0100 (Sat, 12 Jan 2008) | 4 lines
  Issue 1780: Allow leading and trailing whitespace in Decimal constructor,
  when constructing from a string. Disallow trailing newlines in
  Context.create_decimal.
........
  r59930 | georg.brandl | 2008-01-12 11:53:29 +0100 (Sat, 12 Jan 2008) | 3 lines
  Move OSError docs to exceptions doc, remove obsolete descriptions
  from os docs, rework posix docs.
........
  r59931 | georg.brandl | 2008-01-12 14:47:57 +0100 (Sat, 12 Jan 2008) | 3 lines
  Patch #1700288: Method cache optimization, by Armin Rigo, ported to
  2.6 by Kevin Jacobs.
........
  r59932 | georg.brandl | 2008-01-12 17:11:09 +0100 (Sat, 12 Jan 2008) | 2 lines
  Fix editing glitch.
........
											
										 
											2008-01-12 19:39:10 +00:00
										 |  |  | #if 0 /* XXX this is not quite _PyType_Lookup anymore */
 | 
					
						
							| 
									
										
										
										
											2002-08-19 19:22:50 +00:00
										 |  |  | 	/* Inline _PyType_Lookup */ | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | 		Py_ssize_t i, n; | 
					
						
							| 
									
										
										
										
											2002-08-19 19:22:50 +00:00
										 |  |  | 		PyObject *mro, *base, *dict; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		/* Look in tp_dict of types in MRO */ | 
					
						
							|  |  |  | 		mro = tp->tp_mro; | 
					
						
							|  |  |  | 		assert(mro != NULL); | 
					
						
							|  |  |  | 		assert(PyTuple_Check(mro)); | 
					
						
							|  |  |  | 		n = PyTuple_GET_SIZE(mro); | 
					
						
							|  |  |  | 		for (i = 0; i < n; i++) { | 
					
						
							|  |  |  | 			base = PyTuple_GET_ITEM(mro, i); | 
					
						
							| 
									
										
										
										
											2006-08-17 05:42:55 +00:00
										 |  |  | 			assert(PyType_Check(base)); | 
					
						
							|  |  |  | 			dict = ((PyTypeObject *)base)->tp_dict; | 
					
						
							| 
									
										
										
										
											2002-08-19 19:22:50 +00:00
										 |  |  | 			assert(dict && PyDict_Check(dict)); | 
					
						
							|  |  |  | 			descr = PyDict_GetItem(dict, name); | 
					
						
							|  |  |  | 			if (descr != NULL) | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
											  
											
												Merged revisions 59921-59932 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r59923 | raymond.hettinger | 2008-01-11 19:04:55 +0100 (Fri, 11 Jan 2008) | 1 line
  Speed-up and simplify code urlparse's result objects.
........
  r59924 | andrew.kuchling | 2008-01-11 20:33:24 +0100 (Fri, 11 Jan 2008) | 1 line
  Bug #1790: update link; remove outdated paragraph
........
  r59925 | thomas.heller | 2008-01-11 20:34:06 +0100 (Fri, 11 Jan 2008) | 5 lines
  Raise an error instead of crashing with a segfault when a NULL
  function pointer is called.
  Will backport to release25-maint.
........
  r59927 | thomas.heller | 2008-01-11 21:29:19 +0100 (Fri, 11 Jan 2008) | 4 lines
  Fix a potential 'SystemError: NULL result without error'.
  NULL may be a valid return value from PyLong_AsVoidPtr.
  Will backport to release25-maint.
........
  r59928 | raymond.hettinger | 2008-01-12 00:25:18 +0100 (Sat, 12 Jan 2008) | 1 line
  Update the opcode docs for STORE_MAP and BUILD_MAP
........
  r59929 | mark.dickinson | 2008-01-12 02:56:00 +0100 (Sat, 12 Jan 2008) | 4 lines
  Issue 1780: Allow leading and trailing whitespace in Decimal constructor,
  when constructing from a string. Disallow trailing newlines in
  Context.create_decimal.
........
  r59930 | georg.brandl | 2008-01-12 11:53:29 +0100 (Sat, 12 Jan 2008) | 3 lines
  Move OSError docs to exceptions doc, remove obsolete descriptions
  from os docs, rework posix docs.
........
  r59931 | georg.brandl | 2008-01-12 14:47:57 +0100 (Sat, 12 Jan 2008) | 3 lines
  Patch #1700288: Method cache optimization, by Armin Rigo, ported to
  2.6 by Kevin Jacobs.
........
  r59932 | georg.brandl | 2008-01-12 17:11:09 +0100 (Sat, 12 Jan 2008) | 2 lines
  Fix editing glitch.
........
											
										 
											2008-01-12 19:39:10 +00:00
										 |  |  | #else
 | 
					
						
							|  |  |  | 	descr = _PyType_Lookup(tp, name); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2002-08-19 19:22:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-08-15 13:07:47 +00:00
										 |  |  | 	Py_XINCREF(descr); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	f = NULL; | 
					
						
							| 
									
										
										
										
											2006-07-27 21:53:35 +00:00
										 |  |  | 	if (descr != NULL) { | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 		f = descr->ob_type->tp_descr_get; | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 		if (f != NULL && PyDescr_IsData(descr)) { | 
					
						
							|  |  |  | 			res = f(descr, obj, (PyObject *)obj->ob_type); | 
					
						
							| 
									
										
										
										
											2003-08-15 13:07:47 +00:00
										 |  |  | 			Py_DECREF(descr); | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 			goto done; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-08-19 16:50:48 +00:00
										 |  |  | 	/* Inline _PyObject_GetDictPtr */ | 
					
						
							|  |  |  | 	dictoffset = tp->tp_dictoffset; | 
					
						
							|  |  |  | 	if (dictoffset != 0) { | 
					
						
							|  |  |  | 		PyObject *dict; | 
					
						
							|  |  |  | 		if (dictoffset < 0) { | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | 			Py_ssize_t tsize; | 
					
						
							| 
									
										
										
										
											2002-08-19 16:50:48 +00:00
										 |  |  | 			size_t size; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			tsize = ((PyVarObject *)obj)->ob_size; | 
					
						
							|  |  |  | 			if (tsize < 0) | 
					
						
							|  |  |  | 				tsize = -tsize; | 
					
						
							|  |  |  | 			size = _PyObject_VAR_SIZE(tp, tsize); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			dictoffset += (long)size; | 
					
						
							|  |  |  | 			assert(dictoffset > 0); | 
					
						
							|  |  |  | 			assert(dictoffset % SIZEOF_VOID_P == 0); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		dictptr = (PyObject **) ((char *)obj + dictoffset); | 
					
						
							|  |  |  | 		dict = *dictptr; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 		if (dict != NULL) { | 
					
						
							| 
									
										
											  
											
												Merged revisions 60245-60277 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r60246 | guido.van.rossum | 2008-01-24 18:58:05 +0100 (Thu, 24 Jan 2008) | 2 lines
  Fix test67.py from issue #1303614.
........
  r60248 | raymond.hettinger | 2008-01-24 19:05:54 +0100 (Thu, 24 Jan 2008) | 1 line
  Clean-up and speed-up code by accessing numerator/denominator directly.  There's no reason to enforce readonliness
........
  r60249 | raymond.hettinger | 2008-01-24 19:12:23 +0100 (Thu, 24 Jan 2008) | 1 line
  Revert 60189 and restore performance.
........
  r60250 | guido.van.rossum | 2008-01-24 19:21:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  News about recently fixed crashers:
  - A few crashers fixed: weakref_in_del.py (issue #1377858);
    loosing_dict_ref.py (issue #1303614, test67.py);
    borrowed_ref_[34].py (not in tracker).
........
  r60252 | thomas.heller | 2008-01-24 19:36:27 +0100 (Thu, 24 Jan 2008) | 7 lines
  Use a PyDictObject again for the array type cache; retrieving items
  from the WeakValueDictionary was slower by nearly a factor of 3.
  To avoid leaks, weakref proxies for the array types are put into the
  cache dict, with weakref callbacks that removes the entries when the
  type goes away.
........
  r60253 | thomas.heller | 2008-01-24 19:54:12 +0100 (Thu, 24 Jan 2008) | 2 lines
  Replace Py_BuildValue with PyTuple_Pack because it is faster.
  Also add a missing DECREF.
........
  r60254 | raymond.hettinger | 2008-01-24 20:05:29 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for trunc().
........
  r60255 | thomas.heller | 2008-01-24 20:15:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  Invert the checks in get_[u]long and get_[u]longlong.  The intent was
  to not accept float types; the result was that integer-like objects
  were not accepted.
  Ported from release25-maint.
........
  r60256 | raymond.hettinger | 2008-01-24 20:30:19 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for int(r) just like the other numeric classes.
........
  r60263 | raymond.hettinger | 2008-01-24 22:23:58 +0100 (Thu, 24 Jan 2008) | 1 line
  Expand tests to include nested graph structures.
........
  r60264 | raymond.hettinger | 2008-01-24 22:47:56 +0100 (Thu, 24 Jan 2008) | 1 line
  Shorter pprint's for empty sets and frozensets.  Fix indentation of frozensets.  Add tests including two complex data structures.
........
  r60265 | amaury.forgeotdarc | 2008-01-24 23:51:18 +0100 (Thu, 24 Jan 2008) | 14 lines
  #1920: when considering a block starting by "while 0", the compiler optimized the
  whole construct away, even when an 'else' clause is present::
      while 0:
          print("no")
      else:
          print("yes")
  did not generate any code at all.
  Now the compiler emits the 'else' block, like it already does for 'if' statements.
  Will backport.
........
  r60266 | amaury.forgeotdarc | 2008-01-24 23:59:25 +0100 (Thu, 24 Jan 2008) | 2 lines
  News entry for r60265 (Issue 1920).
........
  r60269 | raymond.hettinger | 2008-01-25 00:50:26 +0100 (Fri, 25 Jan 2008) | 1 line
  More code cleanup.  Remove unnecessary indirection to useless class methods.
........
  r60270 | raymond.hettinger | 2008-01-25 01:21:54 +0100 (Fri, 25 Jan 2008) | 1 line
  Add support for copy, deepcopy, and pickle.
........
  r60271 | raymond.hettinger | 2008-01-25 01:33:45 +0100 (Fri, 25 Jan 2008) | 1 line
  Mark todos and review comments.
........
  r60272 | raymond.hettinger | 2008-01-25 02:13:12 +0100 (Fri, 25 Jan 2008) | 1 line
  Add one other review comment.
........
  r60273 | raymond.hettinger | 2008-01-25 02:23:38 +0100 (Fri, 25 Jan 2008) | 1 line
  Fix-up signature for approximation.
........
  r60274 | raymond.hettinger | 2008-01-25 02:46:33 +0100 (Fri, 25 Jan 2008) | 1 line
  More design notes
........
  r60276 | neal.norwitz | 2008-01-25 07:37:23 +0100 (Fri, 25 Jan 2008) | 6 lines
  Make the test more robust by trying to reconnect up to 3 times
  in case there were transient failures.  This will hopefully silence
  the buildbots for this test.  As we find other tests that have a problem,
  we can fix with a similar strategy assuming it is successful.  It worked
  on my box in a loop for 10+ runs where it would have an exception otherwise.
........
  r60277 | neal.norwitz | 2008-01-25 09:04:16 +0100 (Fri, 25 Jan 2008) | 4 lines
  Add prototypes to get the mathmodule.c to compile on OSF1 5.1 (Tru64)
  and eliminate a compiler warning in floatobject.c.  There might be
  a better way to go about this, but it should be good enough for now.
........
											
										 
											2008-01-25 11:23:10 +00:00
										 |  |  | 			Py_INCREF(dict); | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 			res = PyDict_GetItem(dict, name); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 			if (res != NULL) { | 
					
						
							|  |  |  | 				Py_INCREF(res); | 
					
						
							| 
									
										
										
										
											2003-08-15 13:07:47 +00:00
										 |  |  | 				Py_XDECREF(descr); | 
					
						
							| 
									
										
											  
											
												Merged revisions 60245-60277 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r60246 | guido.van.rossum | 2008-01-24 18:58:05 +0100 (Thu, 24 Jan 2008) | 2 lines
  Fix test67.py from issue #1303614.
........
  r60248 | raymond.hettinger | 2008-01-24 19:05:54 +0100 (Thu, 24 Jan 2008) | 1 line
  Clean-up and speed-up code by accessing numerator/denominator directly.  There's no reason to enforce readonliness
........
  r60249 | raymond.hettinger | 2008-01-24 19:12:23 +0100 (Thu, 24 Jan 2008) | 1 line
  Revert 60189 and restore performance.
........
  r60250 | guido.van.rossum | 2008-01-24 19:21:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  News about recently fixed crashers:
  - A few crashers fixed: weakref_in_del.py (issue #1377858);
    loosing_dict_ref.py (issue #1303614, test67.py);
    borrowed_ref_[34].py (not in tracker).
........
  r60252 | thomas.heller | 2008-01-24 19:36:27 +0100 (Thu, 24 Jan 2008) | 7 lines
  Use a PyDictObject again for the array type cache; retrieving items
  from the WeakValueDictionary was slower by nearly a factor of 3.
  To avoid leaks, weakref proxies for the array types are put into the
  cache dict, with weakref callbacks that removes the entries when the
  type goes away.
........
  r60253 | thomas.heller | 2008-01-24 19:54:12 +0100 (Thu, 24 Jan 2008) | 2 lines
  Replace Py_BuildValue with PyTuple_Pack because it is faster.
  Also add a missing DECREF.
........
  r60254 | raymond.hettinger | 2008-01-24 20:05:29 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for trunc().
........
  r60255 | thomas.heller | 2008-01-24 20:15:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  Invert the checks in get_[u]long and get_[u]longlong.  The intent was
  to not accept float types; the result was that integer-like objects
  were not accepted.
  Ported from release25-maint.
........
  r60256 | raymond.hettinger | 2008-01-24 20:30:19 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for int(r) just like the other numeric classes.
........
  r60263 | raymond.hettinger | 2008-01-24 22:23:58 +0100 (Thu, 24 Jan 2008) | 1 line
  Expand tests to include nested graph structures.
........
  r60264 | raymond.hettinger | 2008-01-24 22:47:56 +0100 (Thu, 24 Jan 2008) | 1 line
  Shorter pprint's for empty sets and frozensets.  Fix indentation of frozensets.  Add tests including two complex data structures.
........
  r60265 | amaury.forgeotdarc | 2008-01-24 23:51:18 +0100 (Thu, 24 Jan 2008) | 14 lines
  #1920: when considering a block starting by "while 0", the compiler optimized the
  whole construct away, even when an 'else' clause is present::
      while 0:
          print("no")
      else:
          print("yes")
  did not generate any code at all.
  Now the compiler emits the 'else' block, like it already does for 'if' statements.
  Will backport.
........
  r60266 | amaury.forgeotdarc | 2008-01-24 23:59:25 +0100 (Thu, 24 Jan 2008) | 2 lines
  News entry for r60265 (Issue 1920).
........
  r60269 | raymond.hettinger | 2008-01-25 00:50:26 +0100 (Fri, 25 Jan 2008) | 1 line
  More code cleanup.  Remove unnecessary indirection to useless class methods.
........
  r60270 | raymond.hettinger | 2008-01-25 01:21:54 +0100 (Fri, 25 Jan 2008) | 1 line
  Add support for copy, deepcopy, and pickle.
........
  r60271 | raymond.hettinger | 2008-01-25 01:33:45 +0100 (Fri, 25 Jan 2008) | 1 line
  Mark todos and review comments.
........
  r60272 | raymond.hettinger | 2008-01-25 02:13:12 +0100 (Fri, 25 Jan 2008) | 1 line
  Add one other review comment.
........
  r60273 | raymond.hettinger | 2008-01-25 02:23:38 +0100 (Fri, 25 Jan 2008) | 1 line
  Fix-up signature for approximation.
........
  r60274 | raymond.hettinger | 2008-01-25 02:46:33 +0100 (Fri, 25 Jan 2008) | 1 line
  More design notes
........
  r60276 | neal.norwitz | 2008-01-25 07:37:23 +0100 (Fri, 25 Jan 2008) | 6 lines
  Make the test more robust by trying to reconnect up to 3 times
  in case there were transient failures.  This will hopefully silence
  the buildbots for this test.  As we find other tests that have a problem,
  we can fix with a similar strategy assuming it is successful.  It worked
  on my box in a loop for 10+ runs where it would have an exception otherwise.
........
  r60277 | neal.norwitz | 2008-01-25 09:04:16 +0100 (Fri, 25 Jan 2008) | 4 lines
  Add prototypes to get the mathmodule.c to compile on OSF1 5.1 (Tru64)
  and eliminate a compiler warning in floatobject.c.  There might be
  a better way to go about this, but it should be good enough for now.
........
											
										 
											2008-01-25 11:23:10 +00:00
										 |  |  |                                 Py_DECREF(dict); | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 				goto done; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
											  
											
												Merged revisions 60245-60277 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r60246 | guido.van.rossum | 2008-01-24 18:58:05 +0100 (Thu, 24 Jan 2008) | 2 lines
  Fix test67.py from issue #1303614.
........
  r60248 | raymond.hettinger | 2008-01-24 19:05:54 +0100 (Thu, 24 Jan 2008) | 1 line
  Clean-up and speed-up code by accessing numerator/denominator directly.  There's no reason to enforce readonliness
........
  r60249 | raymond.hettinger | 2008-01-24 19:12:23 +0100 (Thu, 24 Jan 2008) | 1 line
  Revert 60189 and restore performance.
........
  r60250 | guido.van.rossum | 2008-01-24 19:21:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  News about recently fixed crashers:
  - A few crashers fixed: weakref_in_del.py (issue #1377858);
    loosing_dict_ref.py (issue #1303614, test67.py);
    borrowed_ref_[34].py (not in tracker).
........
  r60252 | thomas.heller | 2008-01-24 19:36:27 +0100 (Thu, 24 Jan 2008) | 7 lines
  Use a PyDictObject again for the array type cache; retrieving items
  from the WeakValueDictionary was slower by nearly a factor of 3.
  To avoid leaks, weakref proxies for the array types are put into the
  cache dict, with weakref callbacks that removes the entries when the
  type goes away.
........
  r60253 | thomas.heller | 2008-01-24 19:54:12 +0100 (Thu, 24 Jan 2008) | 2 lines
  Replace Py_BuildValue with PyTuple_Pack because it is faster.
  Also add a missing DECREF.
........
  r60254 | raymond.hettinger | 2008-01-24 20:05:29 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for trunc().
........
  r60255 | thomas.heller | 2008-01-24 20:15:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  Invert the checks in get_[u]long and get_[u]longlong.  The intent was
  to not accept float types; the result was that integer-like objects
  were not accepted.
  Ported from release25-maint.
........
  r60256 | raymond.hettinger | 2008-01-24 20:30:19 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for int(r) just like the other numeric classes.
........
  r60263 | raymond.hettinger | 2008-01-24 22:23:58 +0100 (Thu, 24 Jan 2008) | 1 line
  Expand tests to include nested graph structures.
........
  r60264 | raymond.hettinger | 2008-01-24 22:47:56 +0100 (Thu, 24 Jan 2008) | 1 line
  Shorter pprint's for empty sets and frozensets.  Fix indentation of frozensets.  Add tests including two complex data structures.
........
  r60265 | amaury.forgeotdarc | 2008-01-24 23:51:18 +0100 (Thu, 24 Jan 2008) | 14 lines
  #1920: when considering a block starting by "while 0", the compiler optimized the
  whole construct away, even when an 'else' clause is present::
      while 0:
          print("no")
      else:
          print("yes")
  did not generate any code at all.
  Now the compiler emits the 'else' block, like it already does for 'if' statements.
  Will backport.
........
  r60266 | amaury.forgeotdarc | 2008-01-24 23:59:25 +0100 (Thu, 24 Jan 2008) | 2 lines
  News entry for r60265 (Issue 1920).
........
  r60269 | raymond.hettinger | 2008-01-25 00:50:26 +0100 (Fri, 25 Jan 2008) | 1 line
  More code cleanup.  Remove unnecessary indirection to useless class methods.
........
  r60270 | raymond.hettinger | 2008-01-25 01:21:54 +0100 (Fri, 25 Jan 2008) | 1 line
  Add support for copy, deepcopy, and pickle.
........
  r60271 | raymond.hettinger | 2008-01-25 01:33:45 +0100 (Fri, 25 Jan 2008) | 1 line
  Mark todos and review comments.
........
  r60272 | raymond.hettinger | 2008-01-25 02:13:12 +0100 (Fri, 25 Jan 2008) | 1 line
  Add one other review comment.
........
  r60273 | raymond.hettinger | 2008-01-25 02:23:38 +0100 (Fri, 25 Jan 2008) | 1 line
  Fix-up signature for approximation.
........
  r60274 | raymond.hettinger | 2008-01-25 02:46:33 +0100 (Fri, 25 Jan 2008) | 1 line
  More design notes
........
  r60276 | neal.norwitz | 2008-01-25 07:37:23 +0100 (Fri, 25 Jan 2008) | 6 lines
  Make the test more robust by trying to reconnect up to 3 times
  in case there were transient failures.  This will hopefully silence
  the buildbots for this test.  As we find other tests that have a problem,
  we can fix with a similar strategy assuming it is successful.  It worked
  on my box in a loop for 10+ runs where it would have an exception otherwise.
........
  r60277 | neal.norwitz | 2008-01-25 09:04:16 +0100 (Fri, 25 Jan 2008) | 4 lines
  Add prototypes to get the mathmodule.c to compile on OSF1 5.1 (Tru64)
  and eliminate a compiler warning in floatobject.c.  There might be
  a better way to go about this, but it should be good enough for now.
........
											
										 
											2008-01-25 11:23:10 +00:00
										 |  |  |                         Py_DECREF(dict); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 	if (f != NULL) { | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 		res = f(descr, obj, (PyObject *)Py_TYPE(obj)); | 
					
						
							| 
									
										
										
										
											2003-08-15 13:07:47 +00:00
										 |  |  | 		Py_DECREF(descr); | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 		goto done; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (descr != NULL) { | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 		res = descr; | 
					
						
							| 
									
										
										
										
											2003-08-15 13:07:47 +00:00
										 |  |  | 		/* descr was already increfed above */ | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 		goto done; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	PyErr_Format(PyExc_AttributeError, | 
					
						
							|  |  |  | 		     "'%.50s' object has no attribute '%.400s'", | 
					
						
							| 
									
										
										
										
											2008-08-07 18:54:33 +00:00
										 |  |  | 		     tp->tp_name, _PyUnicode_AsString(name)); | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  |   done: | 
					
						
							|  |  |  | 	Py_DECREF(name); | 
					
						
							|  |  |  | 	return res; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	PyTypeObject *tp = Py_TYPE(obj); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	PyObject *descr; | 
					
						
							|  |  |  | 	descrsetfunc f; | 
					
						
							|  |  |  | 	PyObject **dictptr; | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 	int res = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-06-10 09:51:05 +00:00
										 |  |  | 	if (!PyUnicode_Check(name)){ | 
					
						
							|  |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			     "attribute name must be string, not '%.200s'", | 
					
						
							|  |  |  | 			     name->ob_type->tp_name); | 
					
						
							|  |  |  | 		return -1; | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		Py_INCREF(name); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (tp->tp_dict == NULL) { | 
					
						
							| 
									
										
										
										
											2001-08-07 17:24:28 +00:00
										 |  |  | 		if (PyType_Ready(tp) < 0) | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 			goto done; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	descr = _PyType_Lookup(tp, name); | 
					
						
							|  |  |  | 	f = NULL; | 
					
						
							| 
									
										
										
										
											2006-07-27 21:53:35 +00:00
										 |  |  | 	if (descr != NULL) { | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 		f = descr->ob_type->tp_descr_set; | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 		if (f != NULL && PyDescr_IsData(descr)) { | 
					
						
							|  |  |  | 			res = f(descr, obj, value); | 
					
						
							|  |  |  | 			goto done; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	dictptr = _PyObject_GetDictPtr(obj); | 
					
						
							|  |  |  | 	if (dictptr != NULL) { | 
					
						
							|  |  |  | 		PyObject *dict = *dictptr; | 
					
						
							|  |  |  | 		if (dict == NULL && value != NULL) { | 
					
						
							|  |  |  | 			dict = PyDict_New(); | 
					
						
							|  |  |  | 			if (dict == NULL) | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 				goto done; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 			*dictptr = dict; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (dict != NULL) { | 
					
						
							| 
									
										
											  
											
												Merged revisions 60245-60277 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r60246 | guido.van.rossum | 2008-01-24 18:58:05 +0100 (Thu, 24 Jan 2008) | 2 lines
  Fix test67.py from issue #1303614.
........
  r60248 | raymond.hettinger | 2008-01-24 19:05:54 +0100 (Thu, 24 Jan 2008) | 1 line
  Clean-up and speed-up code by accessing numerator/denominator directly.  There's no reason to enforce readonliness
........
  r60249 | raymond.hettinger | 2008-01-24 19:12:23 +0100 (Thu, 24 Jan 2008) | 1 line
  Revert 60189 and restore performance.
........
  r60250 | guido.van.rossum | 2008-01-24 19:21:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  News about recently fixed crashers:
  - A few crashers fixed: weakref_in_del.py (issue #1377858);
    loosing_dict_ref.py (issue #1303614, test67.py);
    borrowed_ref_[34].py (not in tracker).
........
  r60252 | thomas.heller | 2008-01-24 19:36:27 +0100 (Thu, 24 Jan 2008) | 7 lines
  Use a PyDictObject again for the array type cache; retrieving items
  from the WeakValueDictionary was slower by nearly a factor of 3.
  To avoid leaks, weakref proxies for the array types are put into the
  cache dict, with weakref callbacks that removes the entries when the
  type goes away.
........
  r60253 | thomas.heller | 2008-01-24 19:54:12 +0100 (Thu, 24 Jan 2008) | 2 lines
  Replace Py_BuildValue with PyTuple_Pack because it is faster.
  Also add a missing DECREF.
........
  r60254 | raymond.hettinger | 2008-01-24 20:05:29 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for trunc().
........
  r60255 | thomas.heller | 2008-01-24 20:15:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  Invert the checks in get_[u]long and get_[u]longlong.  The intent was
  to not accept float types; the result was that integer-like objects
  were not accepted.
  Ported from release25-maint.
........
  r60256 | raymond.hettinger | 2008-01-24 20:30:19 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for int(r) just like the other numeric classes.
........
  r60263 | raymond.hettinger | 2008-01-24 22:23:58 +0100 (Thu, 24 Jan 2008) | 1 line
  Expand tests to include nested graph structures.
........
  r60264 | raymond.hettinger | 2008-01-24 22:47:56 +0100 (Thu, 24 Jan 2008) | 1 line
  Shorter pprint's for empty sets and frozensets.  Fix indentation of frozensets.  Add tests including two complex data structures.
........
  r60265 | amaury.forgeotdarc | 2008-01-24 23:51:18 +0100 (Thu, 24 Jan 2008) | 14 lines
  #1920: when considering a block starting by "while 0", the compiler optimized the
  whole construct away, even when an 'else' clause is present::
      while 0:
          print("no")
      else:
          print("yes")
  did not generate any code at all.
  Now the compiler emits the 'else' block, like it already does for 'if' statements.
  Will backport.
........
  r60266 | amaury.forgeotdarc | 2008-01-24 23:59:25 +0100 (Thu, 24 Jan 2008) | 2 lines
  News entry for r60265 (Issue 1920).
........
  r60269 | raymond.hettinger | 2008-01-25 00:50:26 +0100 (Fri, 25 Jan 2008) | 1 line
  More code cleanup.  Remove unnecessary indirection to useless class methods.
........
  r60270 | raymond.hettinger | 2008-01-25 01:21:54 +0100 (Fri, 25 Jan 2008) | 1 line
  Add support for copy, deepcopy, and pickle.
........
  r60271 | raymond.hettinger | 2008-01-25 01:33:45 +0100 (Fri, 25 Jan 2008) | 1 line
  Mark todos and review comments.
........
  r60272 | raymond.hettinger | 2008-01-25 02:13:12 +0100 (Fri, 25 Jan 2008) | 1 line
  Add one other review comment.
........
  r60273 | raymond.hettinger | 2008-01-25 02:23:38 +0100 (Fri, 25 Jan 2008) | 1 line
  Fix-up signature for approximation.
........
  r60274 | raymond.hettinger | 2008-01-25 02:46:33 +0100 (Fri, 25 Jan 2008) | 1 line
  More design notes
........
  r60276 | neal.norwitz | 2008-01-25 07:37:23 +0100 (Fri, 25 Jan 2008) | 6 lines
  Make the test more robust by trying to reconnect up to 3 times
  in case there were transient failures.  This will hopefully silence
  the buildbots for this test.  As we find other tests that have a problem,
  we can fix with a similar strategy assuming it is successful.  It worked
  on my box in a loop for 10+ runs where it would have an exception otherwise.
........
  r60277 | neal.norwitz | 2008-01-25 09:04:16 +0100 (Fri, 25 Jan 2008) | 4 lines
  Add prototypes to get the mathmodule.c to compile on OSF1 5.1 (Tru64)
  and eliminate a compiler warning in floatobject.c.  There might be
  a better way to go about this, but it should be good enough for now.
........
											
										 
											2008-01-25 11:23:10 +00:00
										 |  |  | 			Py_INCREF(dict); | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 			if (value == NULL) | 
					
						
							|  |  |  | 				res = PyDict_DelItem(dict, name); | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				res = PyDict_SetItem(dict, name, value); | 
					
						
							|  |  |  | 			if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) | 
					
						
							|  |  |  | 				PyErr_SetObject(PyExc_AttributeError, name); | 
					
						
							| 
									
										
											  
											
												Merged revisions 60245-60277 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r60246 | guido.van.rossum | 2008-01-24 18:58:05 +0100 (Thu, 24 Jan 2008) | 2 lines
  Fix test67.py from issue #1303614.
........
  r60248 | raymond.hettinger | 2008-01-24 19:05:54 +0100 (Thu, 24 Jan 2008) | 1 line
  Clean-up and speed-up code by accessing numerator/denominator directly.  There's no reason to enforce readonliness
........
  r60249 | raymond.hettinger | 2008-01-24 19:12:23 +0100 (Thu, 24 Jan 2008) | 1 line
  Revert 60189 and restore performance.
........
  r60250 | guido.van.rossum | 2008-01-24 19:21:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  News about recently fixed crashers:
  - A few crashers fixed: weakref_in_del.py (issue #1377858);
    loosing_dict_ref.py (issue #1303614, test67.py);
    borrowed_ref_[34].py (not in tracker).
........
  r60252 | thomas.heller | 2008-01-24 19:36:27 +0100 (Thu, 24 Jan 2008) | 7 lines
  Use a PyDictObject again for the array type cache; retrieving items
  from the WeakValueDictionary was slower by nearly a factor of 3.
  To avoid leaks, weakref proxies for the array types are put into the
  cache dict, with weakref callbacks that removes the entries when the
  type goes away.
........
  r60253 | thomas.heller | 2008-01-24 19:54:12 +0100 (Thu, 24 Jan 2008) | 2 lines
  Replace Py_BuildValue with PyTuple_Pack because it is faster.
  Also add a missing DECREF.
........
  r60254 | raymond.hettinger | 2008-01-24 20:05:29 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for trunc().
........
  r60255 | thomas.heller | 2008-01-24 20:15:02 +0100 (Thu, 24 Jan 2008) | 5 lines
  Invert the checks in get_[u]long and get_[u]longlong.  The intent was
  to not accept float types; the result was that integer-like objects
  were not accepted.
  Ported from release25-maint.
........
  r60256 | raymond.hettinger | 2008-01-24 20:30:19 +0100 (Thu, 24 Jan 2008) | 1 line
  Add support for int(r) just like the other numeric classes.
........
  r60263 | raymond.hettinger | 2008-01-24 22:23:58 +0100 (Thu, 24 Jan 2008) | 1 line
  Expand tests to include nested graph structures.
........
  r60264 | raymond.hettinger | 2008-01-24 22:47:56 +0100 (Thu, 24 Jan 2008) | 1 line
  Shorter pprint's for empty sets and frozensets.  Fix indentation of frozensets.  Add tests including two complex data structures.
........
  r60265 | amaury.forgeotdarc | 2008-01-24 23:51:18 +0100 (Thu, 24 Jan 2008) | 14 lines
  #1920: when considering a block starting by "while 0", the compiler optimized the
  whole construct away, even when an 'else' clause is present::
      while 0:
          print("no")
      else:
          print("yes")
  did not generate any code at all.
  Now the compiler emits the 'else' block, like it already does for 'if' statements.
  Will backport.
........
  r60266 | amaury.forgeotdarc | 2008-01-24 23:59:25 +0100 (Thu, 24 Jan 2008) | 2 lines
  News entry for r60265 (Issue 1920).
........
  r60269 | raymond.hettinger | 2008-01-25 00:50:26 +0100 (Fri, 25 Jan 2008) | 1 line
  More code cleanup.  Remove unnecessary indirection to useless class methods.
........
  r60270 | raymond.hettinger | 2008-01-25 01:21:54 +0100 (Fri, 25 Jan 2008) | 1 line
  Add support for copy, deepcopy, and pickle.
........
  r60271 | raymond.hettinger | 2008-01-25 01:33:45 +0100 (Fri, 25 Jan 2008) | 1 line
  Mark todos and review comments.
........
  r60272 | raymond.hettinger | 2008-01-25 02:13:12 +0100 (Fri, 25 Jan 2008) | 1 line
  Add one other review comment.
........
  r60273 | raymond.hettinger | 2008-01-25 02:23:38 +0100 (Fri, 25 Jan 2008) | 1 line
  Fix-up signature for approximation.
........
  r60274 | raymond.hettinger | 2008-01-25 02:46:33 +0100 (Fri, 25 Jan 2008) | 1 line
  More design notes
........
  r60276 | neal.norwitz | 2008-01-25 07:37:23 +0100 (Fri, 25 Jan 2008) | 6 lines
  Make the test more robust by trying to reconnect up to 3 times
  in case there were transient failures.  This will hopefully silence
  the buildbots for this test.  As we find other tests that have a problem,
  we can fix with a similar strategy assuming it is successful.  It worked
  on my box in a loop for 10+ runs where it would have an exception otherwise.
........
  r60277 | neal.norwitz | 2008-01-25 09:04:16 +0100 (Fri, 25 Jan 2008) | 4 lines
  Add prototypes to get the mathmodule.c to compile on OSF1 5.1 (Tru64)
  and eliminate a compiler warning in floatobject.c.  There might be
  a better way to go about this, but it should be good enough for now.
........
											
										 
											2008-01-25 11:23:10 +00:00
										 |  |  | 			Py_DECREF(dict); | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 			goto done; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 	if (f != NULL) { | 
					
						
							|  |  |  | 		res = f(descr, obj, value); | 
					
						
							|  |  |  | 		goto done; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (descr == NULL) { | 
					
						
							|  |  |  | 		PyErr_Format(PyExc_AttributeError, | 
					
						
							| 
									
										
										
										
											2007-06-11 15:37:20 +00:00
										 |  |  | 			     "'%.100s' object has no attribute '%U'", | 
					
						
							|  |  |  | 			     tp->tp_name, name); | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  | 		goto done; | 
					
						
							| 
									
										
										
										
											2001-08-02 04:15:00 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	PyErr_Format(PyExc_AttributeError, | 
					
						
							| 
									
										
										
										
											2007-06-11 15:37:20 +00:00
										 |  |  | 		     "'%.50s' object attribute '%U' is read-only", | 
					
						
							|  |  |  | 		     tp->tp_name, name); | 
					
						
							| 
									
										
										
										
											2001-12-04 15:54:53 +00:00
										 |  |  |   done: | 
					
						
							|  |  |  | 	Py_DECREF(name); | 
					
						
							|  |  |  | 	return res; | 
					
						
							| 
									
										
										
										
											1997-05-20 18:34:44 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-05-12 08:24:20 +00:00
										 |  |  | /* Test a value used as condition, e.g., in a for or if statement.
 | 
					
						
							|  |  |  |    Return -1 if an error occurred */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyObject_IsTrue(PyObject *v) | 
					
						
							| 
									
										
										
										
											1993-05-12 08:24:20 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | 	Py_ssize_t res; | 
					
						
							| 
									
										
										
										
											2002-08-24 06:31:34 +00:00
										 |  |  | 	if (v == Py_True) | 
					
						
							|  |  |  | 		return 1; | 
					
						
							|  |  |  | 	if (v == Py_False) | 
					
						
							|  |  |  | 		return 0; | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 	if (v == Py_None) | 
					
						
							| 
									
										
										
										
											2002-06-13 21:32:44 +00:00
										 |  |  | 		return 0; | 
					
						
							| 
									
										
										
										
											1998-05-22 00:53:24 +00:00
										 |  |  | 	else if (v->ob_type->tp_as_number != NULL && | 
					
						
							| 
									
										
										
										
											2006-11-28 19:15:13 +00:00
										 |  |  | 		 v->ob_type->tp_as_number->nb_bool != NULL) | 
					
						
							|  |  |  | 		res = (*v->ob_type->tp_as_number->nb_bool)(v); | 
					
						
							| 
									
										
										
										
											1998-05-22 00:53:24 +00:00
										 |  |  | 	else if (v->ob_type->tp_as_mapping != NULL && | 
					
						
							|  |  |  | 		 v->ob_type->tp_as_mapping->mp_length != NULL) | 
					
						
							| 
									
										
										
										
											1993-05-12 08:24:20 +00:00
										 |  |  | 		res = (*v->ob_type->tp_as_mapping->mp_length)(v); | 
					
						
							| 
									
										
										
										
											1998-05-22 00:53:24 +00:00
										 |  |  | 	else if (v->ob_type->tp_as_sequence != NULL && | 
					
						
							|  |  |  | 		 v->ob_type->tp_as_sequence->sq_length != NULL) | 
					
						
							| 
									
										
										
										
											1993-05-12 08:24:20 +00:00
										 |  |  | 		res = (*v->ob_type->tp_as_sequence->sq_length)(v); | 
					
						
							|  |  |  | 	else | 
					
						
							| 
									
										
										
										
											2002-06-13 21:32:44 +00:00
										 |  |  | 		return 1; | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | 	/* if it is negative, it should be either -1 or -2 */ | 
					
						
							|  |  |  | 	return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int); | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | /* equivalent of 'not v'
 | 
					
						
							| 
									
										
										
										
											1998-04-09 17:53:59 +00:00
										 |  |  |    Return -1 if an error occurred */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyObject_Not(PyObject *v) | 
					
						
							| 
									
										
										
										
											1998-04-09 17:53:59 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int res; | 
					
						
							|  |  |  | 	res = PyObject_IsTrue(v); | 
					
						
							|  |  |  | 	if (res < 0) | 
					
						
							|  |  |  | 		return res; | 
					
						
							|  |  |  | 	return res == 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-26 00:38:22 +00:00
										 |  |  | /* Test whether an object can be called */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyCallable_Check(PyObject *x) | 
					
						
							| 
									
										
										
										
											1995-01-26 00:38:22 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if (x == NULL) | 
					
						
							|  |  |  | 		return 0; | 
					
						
							| 
									
										
										
										
											2006-08-17 05:42:55 +00:00
										 |  |  | 	return x->ob_type->tp_call != NULL; | 
					
						
							| 
									
										
										
										
											1995-01-26 00:38:22 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | /* ------------------------- PyObject_Dir() helpers ------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | /* Helper for PyObject_Dir.
 | 
					
						
							|  |  |  |    Merge the __dict__ of aclass into dict, and recursively also all | 
					
						
							|  |  |  |    the __dict__s of aclass's base classes.  The order of merging isn't | 
					
						
							|  |  |  |    defined, as it's expected that only the final set of dict keys is | 
					
						
							|  |  |  |    interesting. | 
					
						
							|  |  |  |    Return 0 on success, -1 on error. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | merge_class_dict(PyObject* dict, PyObject* aclass) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *classdict; | 
					
						
							|  |  |  | 	PyObject *bases; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	assert(PyDict_Check(dict)); | 
					
						
							|  |  |  | 	assert(aclass); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Merge in the type's dict (if any). */ | 
					
						
							|  |  |  | 	classdict = PyObject_GetAttrString(aclass, "__dict__"); | 
					
						
							|  |  |  | 	if (classdict == NULL) | 
					
						
							|  |  |  | 		PyErr_Clear(); | 
					
						
							|  |  |  | 	else { | 
					
						
							|  |  |  | 		int status = PyDict_Update(dict, classdict); | 
					
						
							|  |  |  | 		Py_DECREF(classdict); | 
					
						
							|  |  |  | 		if (status < 0) | 
					
						
							|  |  |  | 			return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Recursively merge in the base types' (if any) dicts. */ | 
					
						
							|  |  |  | 	bases = PyObject_GetAttrString(aclass, "__bases__"); | 
					
						
							| 
									
										
										
										
											2001-09-16 20:33:22 +00:00
										 |  |  | 	if (bases == NULL) | 
					
						
							|  |  |  | 		PyErr_Clear(); | 
					
						
							|  |  |  | 	else { | 
					
						
							| 
									
										
										
										
											2002-05-13 18:29:46 +00:00
										 |  |  | 		/* We have no guarantee that bases is a real tuple */ | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | 		Py_ssize_t i, n; | 
					
						
							| 
									
										
										
										
											2002-05-13 18:29:46 +00:00
										 |  |  | 		n = PySequence_Size(bases); /* This better be right */ | 
					
						
							|  |  |  | 		if (n < 0) | 
					
						
							|  |  |  | 			PyErr_Clear(); | 
					
						
							|  |  |  | 		else { | 
					
						
							|  |  |  | 			for (i = 0; i < n; i++) { | 
					
						
							| 
									
										
										
										
											2003-02-05 19:35:19 +00:00
										 |  |  | 				int status; | 
					
						
							| 
									
										
										
										
											2002-05-13 18:29:46 +00:00
										 |  |  | 				PyObject *base = PySequence_GetItem(bases, i); | 
					
						
							|  |  |  | 				if (base == NULL) { | 
					
						
							|  |  |  | 					Py_DECREF(bases); | 
					
						
							|  |  |  | 					return -1; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2003-02-05 19:35:19 +00:00
										 |  |  | 				status = merge_class_dict(dict, base); | 
					
						
							|  |  |  | 				Py_DECREF(base); | 
					
						
							|  |  |  | 				if (status < 0) { | 
					
						
							| 
									
										
										
										
											2002-05-13 18:29:46 +00:00
										 |  |  | 					Py_DECREF(bases); | 
					
						
							|  |  |  | 					return -1; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		Py_DECREF(bases); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | /* Helper for PyObject_Dir without arguments: returns the local scope. */ | 
					
						
							|  |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2007-04-13 01:39:34 +00:00
										 |  |  | _dir_locals(void) | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2007-03-12 13:15:14 +00:00
										 |  |  | 	PyObject *names; | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	PyObject *locals = PyEval_GetLocals(); | 
					
						
							| 
									
										
										
										
											2001-09-17 02:38:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	if (locals == NULL) { | 
					
						
							|  |  |  | 		PyErr_SetString(PyExc_SystemError, "frame does not exist"); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-12 13:15:14 +00:00
										 |  |  | 	names = PyMapping_Keys(locals); | 
					
						
							|  |  |  | 	if (!names) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if (!PyList_Check(names)) { | 
					
						
							|  |  |  | 		PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 			"dir(): expected keys() of locals to be a list, " | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 			"not '%.200s'", Py_TYPE(names)->tp_name); | 
					
						
							| 
									
										
										
										
											2007-03-12 13:15:14 +00:00
										 |  |  | 		Py_DECREF(names); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	/* the locals don't need to be DECREF'd */ | 
					
						
							| 
									
										
										
										
											2007-03-12 13:15:14 +00:00
										 |  |  | 	return names; | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Helper for PyObject_Dir of type objects: returns __dict__ and __bases__.
 | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  |    We deliberately don't suck up its __class__, as methods belonging to the | 
					
						
							|  |  |  |    metaclass would probably be more confusing than helpful. | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | _specialized_dir_type(PyObject *obj) | 
					
						
							| 
									
										
										
										
											2001-09-17 02:38:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	PyObject *result = NULL; | 
					
						
							|  |  |  | 	PyObject *dict = PyDict_New(); | 
					
						
							| 
									
										
										
										
											2001-09-17 02:38:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	if (dict != NULL && merge_class_dict(dict, obj) == 0) | 
					
						
							|  |  |  | 		result = PyDict_Keys(dict); | 
					
						
							| 
									
										
										
										
											2001-09-17 02:38:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	Py_XDECREF(dict); | 
					
						
							|  |  |  | 	return result; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-09-17 02:38:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | /* Helper for PyObject_Dir of module objects: returns the module's __dict__. */ | 
					
						
							|  |  |  | static PyObject * | 
					
						
							|  |  |  | _specialized_dir_module(PyObject *obj) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *result = NULL; | 
					
						
							|  |  |  | 	PyObject *dict = PyObject_GetAttrString(obj, "__dict__"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (dict != NULL) { | 
					
						
							|  |  |  | 		if (PyDict_Check(dict)) | 
					
						
							|  |  |  | 			result = PyDict_Keys(dict); | 
					
						
							|  |  |  | 		else { | 
					
						
							|  |  |  | 			PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 				     "%.200s.__dict__ is not a dictionary", | 
					
						
							|  |  |  | 				     PyModule_GetName(obj)); | 
					
						
							| 
									
										
										
										
											2001-09-17 02:38:46 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	Py_XDECREF(dict); | 
					
						
							| 
									
										
										
										
											2001-09-17 02:38:46 +00:00
										 |  |  | 	return result; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | /* Helper for PyObject_Dir of generic objects: returns __dict__, __class__,
 | 
					
						
							|  |  |  |    and recursively up the __class__.__bases__ chain. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | static PyObject * | 
					
						
							|  |  |  | _generic_dir(PyObject *obj) | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	PyObject *result = NULL; | 
					
						
							|  |  |  | 	PyObject *dict = NULL; | 
					
						
							|  |  |  | 	PyObject *itsclass = NULL; | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	/* Get __dict__ (which may or may not be a real dict...) */ | 
					
						
							|  |  |  | 	dict = PyObject_GetAttrString(obj, "__dict__"); | 
					
						
							|  |  |  | 	if (dict == NULL) { | 
					
						
							|  |  |  | 		PyErr_Clear(); | 
					
						
							|  |  |  | 		dict = PyDict_New(); | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	else if (!PyDict_Check(dict)) { | 
					
						
							|  |  |  | 		Py_DECREF(dict); | 
					
						
							|  |  |  | 		dict = PyDict_New(); | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	else { | 
					
						
							|  |  |  | 		/* Copy __dict__ to avoid mutating it. */ | 
					
						
							|  |  |  | 		PyObject *temp = PyDict_Copy(dict); | 
					
						
							|  |  |  | 		Py_DECREF(dict); | 
					
						
							|  |  |  | 		dict = temp; | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	if (dict == NULL) | 
					
						
							|  |  |  | 		goto error; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* Merge in attrs reachable from its class. */ | 
					
						
							|  |  |  | 	itsclass = PyObject_GetAttrString(obj, "__class__"); | 
					
						
							|  |  |  | 	if (itsclass == NULL) | 
					
						
							|  |  |  | 		/* XXX(tomer): Perhaps fall back to obj->ob_type if no
 | 
					
						
							|  |  |  | 		               __class__ exists? */ | 
					
						
							|  |  |  | 		PyErr_Clear(); | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 	else { | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 		if (merge_class_dict(dict, itsclass) != 0) | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 			goto error; | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	result = PyDict_Keys(dict); | 
					
						
							|  |  |  | 	/* fall through */ | 
					
						
							|  |  |  | error: | 
					
						
							|  |  |  | 	Py_XDECREF(itsclass); | 
					
						
							|  |  |  | 	Py_XDECREF(dict); | 
					
						
							|  |  |  | 	return result; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-09-17 02:38:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | /* Helper for PyObject_Dir: object introspection.
 | 
					
						
							|  |  |  |    This calls one of the above specialized versions if no __dir__ method | 
					
						
							|  |  |  |    exists. */ | 
					
						
							|  |  |  | static PyObject * | 
					
						
							|  |  |  | _dir_object(PyObject *obj) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject * result = NULL; | 
					
						
							|  |  |  | 	PyObject * dirfunc = PyObject_GetAttrString((PyObject*)obj->ob_type, | 
					
						
							|  |  |  | 						    "__dir__"); | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	assert(obj); | 
					
						
							|  |  |  | 	if (dirfunc == NULL) { | 
					
						
							|  |  |  | 		/* use default implementation */ | 
					
						
							|  |  |  | 		PyErr_Clear(); | 
					
						
							|  |  |  | 		if (PyModule_Check(obj)) | 
					
						
							|  |  |  | 			result = _specialized_dir_module(obj); | 
					
						
							|  |  |  | 		else if (PyType_Check(obj)) | 
					
						
							|  |  |  | 			result = _specialized_dir_type(obj); | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			result = _generic_dir(obj); | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	else { | 
					
						
							|  |  |  | 		/* use __dir__ */ | 
					
						
							|  |  |  | 		result = PyObject_CallFunctionObjArgs(dirfunc, obj, NULL); | 
					
						
							|  |  |  | 		Py_DECREF(dirfunc); | 
					
						
							|  |  |  | 		if (result == NULL) | 
					
						
							|  |  |  | 			return NULL; | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 		/* result must be a list */ | 
					
						
							|  |  |  | 		/* XXX(gbrandl): could also check if all items are strings */ | 
					
						
							|  |  |  | 		if (!PyList_Check(result)) { | 
					
						
							|  |  |  | 			PyErr_Format(PyExc_TypeError, | 
					
						
							|  |  |  | 				     "__dir__() must return a list, not %.200s", | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 				     Py_TYPE(result)->tp_name); | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 			Py_DECREF(result); | 
					
						
							|  |  |  | 			result = NULL; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2004-08-07 04:55:30 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return result; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Implementation of dir() -- if obj is NULL, returns the names in the current
 | 
					
						
							|  |  |  |    (local) scope.  Otherwise, performs introspection of the object: returns a | 
					
						
							|  |  |  |    sorted list of attribute names (supposedly) accessible from the object | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | PyObject * | 
					
						
							|  |  |  | PyObject_Dir(PyObject *obj) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject * result; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (obj == NULL) | 
					
						
							|  |  |  | 		/* no object -- introspect the locals */ | 
					
						
							|  |  |  | 		result = _dir_locals(); | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 	else | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 		/* object -- introspect the object */ | 
					
						
							|  |  |  | 		result = _dir_object(obj); | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-10 22:13:27 +00:00
										 |  |  | 	assert(result == NULL || PyList_Check(result)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (result != NULL && PyList_Sort(result) != 0) { | 
					
						
							|  |  |  | 		/* sorting the list failed */ | 
					
						
							|  |  |  | 		Py_DECREF(result); | 
					
						
							|  |  |  | 		result = NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-04 22:08:56 +00:00
										 |  |  | 	return result; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											1995-01-26 00:38:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  | NoObject is usable as a non-NULL undefined value, used by the macro None. | 
					
						
							|  |  |  | There is (and should be!) no way to create other objects of this type, | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | so there is exactly one (which is indestructible, by the way). | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | (XXX This type and the type of NotImplemented below should be unified.) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-27 17:26:13 +00:00
										 |  |  | /* ARGSUSED */ | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | none_repr(PyObject *op) | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2007-05-18 17:15:44 +00:00
										 |  |  | 	return PyUnicode_FromString("None"); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-23 16:24:35 +00:00
										 |  |  | /* ARGUSED */ | 
					
						
							|  |  |  | static void | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | none_dealloc(PyObject* ignore) | 
					
						
							| 
									
										
										
										
											2001-01-23 16:24:35 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	/* This should never get called, but we also don't want to SEGV if
 | 
					
						
							| 
									
										
										
										
											2009-02-21 20:59:32 +00:00
										 |  |  | 	 * we accidentally decref None out of existence. | 
					
						
							| 
									
										
										
										
											2001-01-23 16:24:35 +00:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2002-08-07 16:21:51 +00:00
										 |  |  | 	Py_FatalError("deallocating None"); | 
					
						
							| 
									
										
										
										
											2001-01-23 16:24:35 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | static PyTypeObject PyNone_Type = { | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 	PyVarObject_HEAD_INIT(&PyType_Type, 0) | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | 	"NoneType", | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 	none_dealloc,	/*tp_dealloc*/ /*never called*/ | 
					
						
							| 
									
										
										
										
											1992-09-17 17:54:56 +00:00
										 |  |  | 	0,		/*tp_print*/ | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	0,		/*tp_getattr*/ | 
					
						
							|  |  |  | 	0,		/*tp_setattr*/ | 
					
						
							| 
									
										
										
										
											2009-02-02 20:36:42 +00:00
										 |  |  | 	0,		/*tp_reserved*/ | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 	none_repr,	/*tp_repr*/ | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	0,		/*tp_as_number*/ | 
					
						
							|  |  |  | 	0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  | 	0,		/*tp_as_mapping*/ | 
					
						
							| 
									
										
										
										
											1993-03-29 10:43:31 +00:00
										 |  |  | 	0,		/*tp_hash */ | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | PyObject _Py_NoneStruct = { | 
					
						
							| 
									
										
											  
											
												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
										 |  |  |   _PyObject_EXTRA_INIT | 
					
						
							|  |  |  |   1, &PyNone_Type | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-01-04 01:48:10 +00:00
										 |  |  | /* NotImplemented is an object that can be used to signal that an
 | 
					
						
							|  |  |  |    operation is not implemented for the given type combination. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyObject * | 
					
						
							|  |  |  | NotImplemented_repr(PyObject *op) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2007-05-18 17:15:44 +00:00
										 |  |  | 	return PyUnicode_FromString("NotImplemented"); | 
					
						
							| 
									
										
										
										
											2001-01-04 01:48:10 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static PyTypeObject PyNotImplemented_Type = { | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 	PyVarObject_HEAD_INIT(&PyType_Type, 0) | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | 	"NotImplementedType", | 
					
						
							| 
									
										
										
										
											2001-01-04 01:48:10 +00:00
										 |  |  | 	0, | 
					
						
							|  |  |  | 	0, | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 	none_dealloc,	/*tp_dealloc*/ /*never called*/ | 
					
						
							| 
									
										
										
										
											2001-01-04 01:48:10 +00:00
										 |  |  | 	0,		/*tp_print*/ | 
					
						
							|  |  |  | 	0,		/*tp_getattr*/ | 
					
						
							|  |  |  | 	0,		/*tp_setattr*/ | 
					
						
							| 
									
										
										
										
											2009-02-02 20:36:42 +00:00
										 |  |  | 	0,		/*tp_reserved*/ | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 	NotImplemented_repr, /*tp_repr*/ | 
					
						
							| 
									
										
										
										
											2001-01-04 01:48:10 +00:00
										 |  |  | 	0,		/*tp_as_number*/ | 
					
						
							|  |  |  | 	0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  | 	0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  | 	0,		/*tp_hash */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PyObject _Py_NotImplementedStruct = { | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 	_PyObject_EXTRA_INIT | 
					
						
							|  |  |  | 	1, &PyNotImplemented_Type | 
					
						
							| 
									
										
										
										
											2001-01-04 01:48:10 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | void | 
					
						
							|  |  |  | _Py_ReadyTypes(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyType_Type) < 0) | 
					
						
							| 
									
										
										
										
											2009-04-18 20:54:08 +00:00
										 |  |  | 		Py_FatalError("Can't initialize type type"); | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-02 18:57:45 +00:00
										 |  |  | 	if (PyType_Ready(&_PyWeakref_RefType) < 0) | 
					
						
							| 
									
										
										
										
											2009-04-18 20:54:08 +00:00
										 |  |  | 		Py_FatalError("Can't initialize weakref type"); | 
					
						
							| 
									
										
										
										
											2004-07-02 18:57:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-20 02:09:13 +00:00
										 |  |  | 	if (PyType_Ready(&_PyWeakref_CallableProxyType) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize callable weakref proxy type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&_PyWeakref_ProxyType) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize weakref proxy type"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-03 22:41:51 +00:00
										 |  |  | 	if (PyType_Ready(&PyBool_Type) < 0) | 
					
						
							| 
									
										
										
										
											2009-04-18 20:54:08 +00:00
										 |  |  | 		Py_FatalError("Can't initialize bool type"); | 
					
						
							| 
									
										
										
										
											2002-04-03 22:41:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 13:22:05 +00:00
										 |  |  | 	if (PyType_Ready(&PyByteArray_Type) < 0) | 
					
						
							| 
									
										
										
										
											2009-04-20 02:09:13 +00:00
										 |  |  | 		Py_FatalError("Can't initialize bytearray type"); | 
					
						
							| 
									
										
										
										
											2006-04-22 23:28:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 13:28:38 +00:00
										 |  |  | 	if (PyType_Ready(&PyBytes_Type) < 0) | 
					
						
							| 
									
										
										
										
											2002-05-24 19:01:59 +00:00
										 |  |  | 		Py_FatalError("Can't initialize 'str'"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | 	if (PyType_Ready(&PyList_Type) < 0) | 
					
						
							| 
									
										
										
										
											2009-04-20 02:09:13 +00:00
										 |  |  | 		Py_FatalError("Can't initialize list type"); | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyNone_Type) < 0) | 
					
						
							| 
									
										
										
										
											2009-04-18 20:54:08 +00:00
										 |  |  | 		Py_FatalError("Can't initialize None type"); | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-17 05:42:55 +00:00
										 |  |  | 	if (PyType_Ready(Py_Ellipsis->ob_type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize type(Ellipsis)"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | 	if (PyType_Ready(&PyNotImplemented_Type) < 0) | 
					
						
							| 
									
										
										
										
											2009-04-18 20:54:08 +00:00
										 |  |  | 		Py_FatalError("Can't initialize NotImplemented type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyTraceBack_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize traceback type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PySuper_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize super type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyBaseObject_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize object type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyRange_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize range type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyDict_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize dict type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PySet_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize set type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyUnicode_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize str type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PySlice_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize slice type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyStaticMethod_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize static method type"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-20 02:09:13 +00:00
										 |  |  | #ifndef WITHOUT_COMPLEX
 | 
					
						
							| 
									
										
										
										
											2009-04-18 20:54:08 +00:00
										 |  |  | 	if (PyType_Ready(&PyComplex_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize complex type"); | 
					
						
							| 
									
										
										
										
											2009-04-20 02:09:13 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-04-18 20:54:08 +00:00
										 |  |  | 	if (PyType_Ready(&PyFloat_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize float type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyLong_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize int type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyFrozenSet_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize frozenset type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyProperty_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize property type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyMemoryView_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize memoryview type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyTuple_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize tuple type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyEnum_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize enumerate type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyReversed_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize reversed type"); | 
					
						
							| 
									
										
										
										
											2006-08-24 00:41:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-30 18:34:07 +00:00
										 |  |  | 	if (PyType_Ready(&PyStdPrinter_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize StdPrinter"); | 
					
						
							| 
									
										
										
										
											2009-04-20 02:09:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyCode_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize code type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyFrame_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize frame type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyCFunction_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize builtin function type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyMethod_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize method type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyFunction_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize function type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyDictProxy_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize dict proxy type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyGen_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize generator type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyGetSetDescr_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize get-set descriptor type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyWrapperDescr_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize wrapper type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyEllipsis_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize ellipsis type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyMemberDescr_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize member descriptor type"); | 
					
						
							| 
									
										
										
										
											2009-05-09 18:10:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyFilter_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize filter type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyMap_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize map type"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (PyType_Ready(&PyZip_Type) < 0) | 
					
						
							|  |  |  | 		Py_FatalError("Can't initialize zip type"); | 
					
						
							| 
									
										
										
										
											2001-08-16 08:17:26 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-05-22 16:34:47 +00:00
										 |  |  | #ifdef Py_TRACE_REFS
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-08-12 21:32:12 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _Py_NewReference(PyObject *op) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
											  
											
												object.h special-build macro minefield:  renamed all the new lexical
helper macros to something saner, and used them appropriately in other
files too, to reduce #ifdef blocks.
classobject.c, instance_dealloc():  One of my worst Python Memories is
trying to fix this routine a few years ago when COUNT_ALLOCS was defined
but Py_TRACE_REFS wasn't.  The special-build code here is way too
complicated.  Now it's much simpler.  Difference:  in a Py_TRACE_REFS
build, the instance is no longer in the doubly-linked list of live
objects while its __del__ method is executing, and that may be visible
via sys.getobjects() called from a __del__ method.  Tough -- the object
is presumed dead while its __del__ is executing anyway, and not calling
_Py_NewReference() at the start allows enormous code simplification.
typeobject.c, call_finalizer():  The special-build instance_dealloc()
pain apparently spread to here too via cut-'n-paste, and this is much
simpler now too.  In addition, I didn't understand why this routine
was calling _PyObject_GC_TRACK() after a resurrection, since there's no
plausible way _PyObject_GC_UNTRACK() could have been called on the
object by this point.  I suspect it was left over from pasting the
instance_delloc() code.  Instead asserted that the object is still
tracked.  Caution:  I suspect we don't have a test that actually
exercises the subtype_dealloc() __del__-resurrected-me code.
											
										 
											2002-07-11 06:23:50 +00:00
										 |  |  | 	_Py_INC_REFTOTAL; | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	op->ob_refcnt = 1; | 
					
						
							| 
									
										
										
										
											2003-03-23 17:52:28 +00:00
										 |  |  | 	_Py_AddToAllObjects(op, 1); | 
					
						
							| 
									
										
											  
											
												object.h special-build macro minefield:  renamed all the new lexical
helper macros to something saner, and used them appropriately in other
files too, to reduce #ifdef blocks.
classobject.c, instance_dealloc():  One of my worst Python Memories is
trying to fix this routine a few years ago when COUNT_ALLOCS was defined
but Py_TRACE_REFS wasn't.  The special-build code here is way too
complicated.  Now it's much simpler.  Difference:  in a Py_TRACE_REFS
build, the instance is no longer in the doubly-linked list of live
objects while its __del__ method is executing, and that may be visible
via sys.getobjects() called from a __del__ method.  Tough -- the object
is presumed dead while its __del__ is executing anyway, and not calling
_Py_NewReference() at the start allows enormous code simplification.
typeobject.c, call_finalizer():  The special-build instance_dealloc()
pain apparently spread to here too via cut-'n-paste, and this is much
simpler now too.  In addition, I didn't understand why this routine
was calling _PyObject_GC_TRACK() after a resurrection, since there's no
plausible way _PyObject_GC_UNTRACK() could have been called on the
object by this point.  I suspect it was left over from pasting the
instance_delloc() code.  Instead asserted that the object is still
tracked.  Caution:  I suspect we don't have a test that actually
exercises the subtype_dealloc() __del__-resurrected-me code.
											
										 
											2002-07-11 06:23:50 +00:00
										 |  |  | 	_Py_INC_TPALLOCS(op); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-08-12 21:32:12 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _Py_ForgetReference(register PyObject *op) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2000-01-20 22:32:56 +00:00
										 |  |  | #ifdef SLOW_UNREF_CHECK
 | 
					
						
							| 
									
										
										
										
											2000-03-10 22:55:18 +00:00
										 |  |  |         register PyObject *p; | 
					
						
							| 
									
										
										
										
											2000-01-20 22:32:56 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1995-01-02 19:07:15 +00:00
										 |  |  | 	if (op->ob_refcnt < 0) | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 		Py_FatalError("UNREF negative refcnt"); | 
					
						
							| 
									
										
										
										
											1992-09-03 20:32:55 +00:00
										 |  |  | 	if (op == &refchain || | 
					
						
							| 
									
										
										
										
											2007-11-30 10:18:26 +00:00
										 |  |  | 	    op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) { | 
					
						
							|  |  |  | 		fprintf(stderr, "* ob\n"); | 
					
						
							|  |  |  | 		_PyObject_Dump(op); | 
					
						
							|  |  |  | 		fprintf(stderr, "* op->_ob_prev->_ob_next\n"); | 
					
						
							|  |  |  | 		_PyObject_Dump(op->_ob_prev->_ob_next); | 
					
						
							|  |  |  | 		fprintf(stderr, "* op->_ob_next->_ob_prev\n"); | 
					
						
							|  |  |  | 		_PyObject_Dump(op->_ob_next->_ob_prev); | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 		Py_FatalError("UNREF invalid object"); | 
					
						
							| 
									
										
										
										
											2007-11-30 10:18:26 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											1992-09-03 20:32:55 +00:00
										 |  |  | #ifdef SLOW_UNREF_CHECK
 | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | 	for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) { | 
					
						
							|  |  |  | 		if (p == op) | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1995-01-02 19:07:15 +00:00
										 |  |  | 	if (p == &refchain) /* Not found */ | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 		Py_FatalError("UNREF unknown object"); | 
					
						
							| 
									
										
										
										
											1992-09-03 20:32:55 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	op->_ob_next->_ob_prev = op->_ob_prev; | 
					
						
							|  |  |  | 	op->_ob_prev->_ob_next = op->_ob_next; | 
					
						
							| 
									
										
										
										
											1992-09-03 20:32:55 +00:00
										 |  |  | 	op->_ob_next = op->_ob_prev = NULL; | 
					
						
							| 
									
										
											  
											
												object.h special-build macro minefield:  renamed all the new lexical
helper macros to something saner, and used them appropriately in other
files too, to reduce #ifdef blocks.
classobject.c, instance_dealloc():  One of my worst Python Memories is
trying to fix this routine a few years ago when COUNT_ALLOCS was defined
but Py_TRACE_REFS wasn't.  The special-build code here is way too
complicated.  Now it's much simpler.  Difference:  in a Py_TRACE_REFS
build, the instance is no longer in the doubly-linked list of live
objects while its __del__ method is executing, and that may be visible
via sys.getobjects() called from a __del__ method.  Tough -- the object
is presumed dead while its __del__ is executing anyway, and not calling
_Py_NewReference() at the start allows enormous code simplification.
typeobject.c, call_finalizer():  The special-build instance_dealloc()
pain apparently spread to here too via cut-'n-paste, and this is much
simpler now too.  In addition, I didn't understand why this routine
was calling _PyObject_GC_TRACK() after a resurrection, since there's no
plausible way _PyObject_GC_UNTRACK() could have been called on the
object by this point.  I suspect it was left over from pasting the
instance_delloc() code.  Instead asserted that the object is still
tracked.  Caution:  I suspect we don't have a test that actually
exercises the subtype_dealloc() __del__-resurrected-me code.
											
										 
											2002-07-11 06:23:50 +00:00
										 |  |  | 	_Py_INC_TPFREES(op); | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-08-12 21:32:12 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _Py_Dealloc(PyObject *op) | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 	destructor dealloc = Py_TYPE(op)->tp_dealloc; | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 	_Py_ForgetReference(op); | 
					
						
							| 
									
										
										
										
											1994-09-07 14:36:45 +00:00
										 |  |  | 	(*dealloc)(op); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-17 19:52:29 +00:00
										 |  |  | /* Print all live objects.  Because PyObject_Print is called, the
 | 
					
						
							|  |  |  |  * interpreter must be in a healthy state. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											1996-08-12 21:32:12 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _Py_PrintReferences(FILE *fp) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 	PyObject *op; | 
					
						
							| 
									
										
										
										
											1997-08-05 02:04:34 +00:00
										 |  |  | 	fprintf(fp, "Remaining objects:\n"); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) { | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 		fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt); | 
					
						
							| 
									
										
										
										
											1997-05-02 03:12:38 +00:00
										 |  |  | 		if (PyObject_Print(op, fp, 0) != 0) | 
					
						
							|  |  |  | 			PyErr_Clear(); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 		putc('\n', fp); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-17 19:52:29 +00:00
										 |  |  | /* Print the addresses of all live objects.  Unlike _Py_PrintReferences, this
 | 
					
						
							|  |  |  |  * doesn't make any calls to the Python C API, so is always safe to call. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void | 
					
						
							|  |  |  | _Py_PrintReferenceAddresses(FILE *fp) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	PyObject *op; | 
					
						
							|  |  |  | 	fprintf(fp, "Remaining object addresses:\n"); | 
					
						
							|  |  |  | 	for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 		fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op, | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 			op->ob_refcnt, Py_TYPE(op)->tp_name); | 
					
						
							| 
									
										
										
										
											2003-04-17 19:52:29 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-08-29 09:18:14 +00:00
										 |  |  | PyObject * | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _Py_GetObjects(PyObject *self, PyObject *args) | 
					
						
							| 
									
										
										
										
											1995-08-29 09:18:14 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int i, n; | 
					
						
							|  |  |  | 	PyObject *t = NULL; | 
					
						
							|  |  |  | 	PyObject *res, *op; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!PyArg_ParseTuple(args, "i|O", &n, &t)) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	op = refchain._ob_next; | 
					
						
							|  |  |  | 	res = PyList_New(0); | 
					
						
							|  |  |  | 	if (res == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	for (i = 0; (n == 0 || i < n) && op != &refchain; i++) { | 
					
						
							|  |  |  | 		while (op == self || op == args || op == res || op == t || | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 		       (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) { | 
					
						
							| 
									
										
										
										
											1995-08-29 09:18:14 +00:00
										 |  |  | 			op = op->_ob_next; | 
					
						
							|  |  |  | 			if (op == &refchain) | 
					
						
							|  |  |  | 				return res; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (PyList_Append(res, op) < 0) { | 
					
						
							|  |  |  | 			Py_DECREF(res); | 
					
						
							|  |  |  | 			return NULL; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		op = op->_ob_next; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return res; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1996-01-12 01:24:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-05-22 16:34:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-05 22:31:58 +00:00
										 |  |  | /* Hack to force loading of pycapsule.o */ | 
					
						
							|  |  |  | PyTypeObject *_PyCapsule_hack = &PyCapsule_Type; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-05-22 16:34:47 +00:00
										 |  |  | /* Hack to force loading of abstract.o */ | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size; | 
					
						
							| 
									
										
										
										
											1997-08-05 02:04:34 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-16 12:27:23 +00:00
										 |  |  | /* Python's malloc wrappers (see pymem.h) */ | 
					
						
							| 
									
										
										
										
											1997-08-05 02:04:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-07-25 12:56:38 +00:00
										 |  |  | void * | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | PyMem_Malloc(size_t nbytes) | 
					
						
							| 
									
										
										
										
											1997-08-05 02:04:34 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | 	return PyMem_MALLOC(nbytes); | 
					
						
							| 
									
										
										
										
											1997-08-05 02:04:34 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-07-25 12:56:38 +00:00
										 |  |  | void * | 
					
						
							|  |  |  | PyMem_Realloc(void *p, size_t nbytes) | 
					
						
							| 
									
										
										
										
											1997-08-05 02:04:34 +00:00
										 |  |  | { | 
					
						
							| 
									
										
											  
											
												First stab at rationalizing the PyMem_ API.  Mixing PyObject_xyz with
PyMem_{Del, DEL} doesn't work yet (compilation problems).
pyport.h:  _PyMem_EXTRA is gone.
pmem.h:  Repaired comments.  PyMem_{Malloc, MALLOC} and
PyMem_{Realloc, REALLOC} now make the same x-platform guarantees when
asking for 0 bytes, and when passing a NULL pointer to the latter.
object.c:  PyMem_{Malloc, Realloc} just call their macro versions
now, since the latter take care of the x-platform 0 and NULL stuff
by themselves now.
pypcre.c, grow_stack():  So sue me.  On two lines, this called
PyMem_RESIZE to grow a "const" area.  It's not legit to realloc a
const area, so the compiler warned given the new expansion of
PyMem_RESIZE.  It would have gotten the same warning before if it
had used PyMem_Resize() instead; the older macro version, but not the
function version, silently cast away the constness.  IMO that was a wrong
thing to do, and the docs say the macro versions of PyMem_xyz are
deprecated anyway.  If somebody else is resizing const areas with the
macro spelling, they'll get a warning when they recompile now too.
											
										 
											2002-04-12 07:22:56 +00:00
										 |  |  | 	return PyMem_REALLOC(p, nbytes); | 
					
						
							| 
									
										
										
										
											1997-08-05 02:04:34 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							| 
									
										
										
										
											2000-07-25 12:56:38 +00:00
										 |  |  | PyMem_Free(void *p) | 
					
						
							| 
									
										
										
										
											1997-08-05 02:04:34 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | 	PyMem_FREE(p); | 
					
						
							| 
									
										
										
										
											1997-08-05 02:04:34 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-05-03 23:44:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-10 22:32:46 +00:00
										 |  |  | /* These methods are used to control infinite recursion in repr, str, print,
 | 
					
						
							|  |  |  |    etc.  Container objects that may recursively contain themselves, | 
					
						
							|  |  |  |    e.g. builtin dictionaries and lists, should used Py_ReprEnter() and | 
					
						
							|  |  |  |    Py_ReprLeave() to avoid infinite recursion. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Py_ReprEnter() returns 0 the first time it is called for a particular | 
					
						
							|  |  |  |    object and 1 every time thereafter.  It returns -1 if an exception | 
					
						
							|  |  |  |    occurred.  Py_ReprLeave() has no return value. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    See dictobject.c and listobject.c for examples of use. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define KEY "Py_Repr"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | Py_ReprEnter(PyObject *obj) | 
					
						
							| 
									
										
										
										
											1998-04-10 22:32:46 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	PyObject *dict; | 
					
						
							|  |  |  | 	PyObject *list; | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | 	Py_ssize_t i; | 
					
						
							| 
									
										
										
										
											1998-04-10 22:32:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dict = PyThreadState_GetDict(); | 
					
						
							|  |  |  | 	if (dict == NULL) | 
					
						
							| 
									
										
										
										
											2003-04-15 15:12:39 +00:00
										 |  |  | 		return 0; | 
					
						
							| 
									
										
										
										
											1998-04-10 22:32:46 +00:00
										 |  |  | 	list = PyDict_GetItemString(dict, KEY); | 
					
						
							|  |  |  | 	if (list == NULL) { | 
					
						
							|  |  |  | 		list = PyList_New(0); | 
					
						
							|  |  |  | 		if (list == NULL) | 
					
						
							|  |  |  | 			return -1; | 
					
						
							|  |  |  | 		if (PyDict_SetItemString(dict, KEY, list) < 0) | 
					
						
							|  |  |  | 			return -1; | 
					
						
							|  |  |  | 		Py_DECREF(list); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	i = PyList_GET_SIZE(list); | 
					
						
							|  |  |  | 	while (--i >= 0) { | 
					
						
							|  |  |  | 		if (PyList_GET_ITEM(list, i) == obj) | 
					
						
							|  |  |  | 			return 1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	PyList_Append(list, obj); | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | Py_ReprLeave(PyObject *obj) | 
					
						
							| 
									
										
										
										
											1998-04-10 22:32:46 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	PyObject *dict; | 
					
						
							|  |  |  | 	PyObject *list; | 
					
						
							| 
									
										
										
										
											2006-02-15 17:27:45 +00:00
										 |  |  | 	Py_ssize_t i; | 
					
						
							| 
									
										
										
										
											1998-04-10 22:32:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	dict = PyThreadState_GetDict(); | 
					
						
							| 
									
										
										
										
											1998-04-11 15:17:34 +00:00
										 |  |  | 	if (dict == NULL) | 
					
						
							|  |  |  | 		return; | 
					
						
							| 
									
										
										
										
											1998-04-10 22:32:46 +00:00
										 |  |  | 	list = PyDict_GetItemString(dict, KEY); | 
					
						
							| 
									
										
										
										
											1998-04-11 15:17:34 +00:00
										 |  |  | 	if (list == NULL || !PyList_Check(list)) | 
					
						
							|  |  |  | 		return; | 
					
						
							| 
									
										
										
										
											1998-04-10 22:32:46 +00:00
										 |  |  | 	i = PyList_GET_SIZE(list); | 
					
						
							|  |  |  | 	/* Count backwards because we always expect obj to be list[-1] */ | 
					
						
							|  |  |  | 	while (--i >= 0) { | 
					
						
							|  |  |  | 		if (PyList_GET_ITEM(list, i) == obj) { | 
					
						
							|  |  |  | 			PyList_SetSlice(list, i, i + 1, NULL); | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | /* Trashcan support. */ | 
					
						
							| 
									
										
										
										
											2000-04-24 15:40:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | /* Current call-stack depth of tp_dealloc calls. */ | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | int _PyTrash_delete_nesting = 0; | 
					
						
							| 
									
										
										
										
											2000-04-24 15:40:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | /* List of objects that still need to be cleaned up, singly linked via their
 | 
					
						
							|  |  |  |  * gc headers' gc_prev pointers. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | PyObject *_PyTrash_delete_later = NULL; | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | /* Add op to the _PyTrash_delete_later list.  Called when the current
 | 
					
						
							|  |  |  |  * call-stack depth gets large.  op must be a currently untracked gc'ed | 
					
						
							|  |  |  |  * object, with refcount 0.  Py_DECREF must already have been called on it. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _PyTrash_deposit_object(PyObject *op) | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | 	assert(PyObject_IS_GC(op)); | 
					
						
							|  |  |  | 	assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED); | 
					
						
							|  |  |  | 	assert(op->ob_refcnt == 0); | 
					
						
							| 
									
										
										
										
											2002-03-29 03:05:54 +00:00
										 |  |  | 	_Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later; | 
					
						
							| 
									
										
										
										
											2000-04-24 15:40:53 +00:00
										 |  |  | 	_PyTrash_delete_later = op; | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | /* Dealloccate all the objects in the _PyTrash_delete_later list.  Called when
 | 
					
						
							|  |  |  |  * the call-stack unwinds again. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | void | 
					
						
							| 
									
										
										
										
											2000-07-09 15:48:49 +00:00
										 |  |  | _PyTrash_destroy_chain(void) | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	while (_PyTrash_delete_later) { | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | 		PyObject *op = _PyTrash_delete_later; | 
					
						
							| 
									
										
										
										
											2007-12-19 02:45:37 +00:00
										 |  |  | 		destructor dealloc = Py_TYPE(op)->tp_dealloc; | 
					
						
							| 
									
										
										
										
											2002-03-29 03:05:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		_PyTrash_delete_later = | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | 			(PyObject*) _Py_AS_GC(op)->gc.gc_prev; | 
					
						
							| 
									
										
										
										
											2000-04-24 15:40:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | 		/* Call the deallocator directly.  This used to try to
 | 
					
						
							|  |  |  | 		 * fool Py_DECREF into calling it indirectly, but | 
					
						
							|  |  |  | 		 * Py_DECREF was already called on this object, and in | 
					
						
							|  |  |  | 		 * assorted non-release builds calling Py_DECREF again ends | 
					
						
							|  |  |  | 		 * up distorting allocation statistics. | 
					
						
							|  |  |  | 		 */ | 
					
						
							|  |  |  | 		assert(op->ob_refcnt == 0); | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | 		++_PyTrash_delete_nesting; | 
					
						
							| 
									
										
										
										
											2002-07-07 05:13:56 +00:00
										 |  |  | 		(*dealloc)(op); | 
					
						
							| 
									
										
										
										
											2000-03-13 16:01:29 +00:00
										 |  |  | 		--_PyTrash_delete_nesting; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 |