symbian-qemu-0.9.1-12/python-2.6.1/Objects/object.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 /* Generic object operations; and implementation of None (NoObject) */
       
     3 
       
     4 #include "Python.h"
       
     5 
       
     6 #ifdef __cplusplus
       
     7 extern "C" {
       
     8 #endif
       
     9 
       
    10 #ifdef Py_REF_DEBUG
       
    11 Py_ssize_t _Py_RefTotal;
       
    12 
       
    13 Py_ssize_t
       
    14 _Py_GetRefTotal(void)
       
    15 {
       
    16 	PyObject *o;
       
    17 	Py_ssize_t total = _Py_RefTotal;
       
    18         /* ignore the references to the dummy object of the dicts and sets
       
    19            because they are not reliable and not useful (now that the
       
    20            hash table code is well-tested) */
       
    21 	o = _PyDict_Dummy();
       
    22 	if (o != NULL)
       
    23 		total -= o->ob_refcnt;
       
    24 	o = _PySet_Dummy();
       
    25 	if (o != NULL)
       
    26 		total -= o->ob_refcnt;
       
    27 	return total;
       
    28 }
       
    29 #endif /* Py_REF_DEBUG */
       
    30 
       
    31 int Py_DivisionWarningFlag;
       
    32 int Py_Py3kWarningFlag;
       
    33 
       
    34 /* Object allocation routines used by NEWOBJ and NEWVAROBJ macros.
       
    35    These are used by the individual routines for object creation.
       
    36    Do not call them otherwise, they do not initialize the object! */
       
    37 
       
    38 #ifdef Py_TRACE_REFS
       
    39 /* Head of circular doubly-linked list of all objects.  These are linked
       
    40  * together via the _ob_prev and _ob_next members of a PyObject, which
       
    41  * exist only in a Py_TRACE_REFS build.
       
    42  */
       
    43 static PyObject refchain = {&refchain, &refchain};
       
    44 
       
    45 /* Insert op at the front of the list of all objects.  If force is true,
       
    46  * op is added even if _ob_prev and _ob_next are non-NULL already.  If
       
    47  * force is false amd _ob_prev or _ob_next are non-NULL, do nothing.
       
    48  * force should be true if and only if op points to freshly allocated,
       
    49  * uninitialized memory, or you've unlinked op from the list and are
       
    50  * relinking it into the front.
       
    51  * Note that objects are normally added to the list via _Py_NewReference,
       
    52  * which is called by PyObject_Init.  Not all objects are initialized that
       
    53  * way, though; exceptions include statically allocated type objects, and
       
    54  * statically allocated singletons (like Py_True and Py_None).
       
    55  */
       
    56 void
       
    57 _Py_AddToAllObjects(PyObject *op, int force)
       
    58 {
       
    59 #ifdef  Py_DEBUG
       
    60 	if (!force) {
       
    61 		/* If it's initialized memory, op must be in or out of
       
    62 		 * the list unambiguously.
       
    63 		 */
       
    64 		assert((op->_ob_prev == NULL) == (op->_ob_next == NULL));
       
    65 	}
       
    66 #endif
       
    67 	if (force || op->_ob_prev == NULL) {
       
    68 		op->_ob_next = refchain._ob_next;
       
    69 		op->_ob_prev = &refchain;
       
    70 		refchain._ob_next->_ob_prev = op;
       
    71 		refchain._ob_next = op;
       
    72 	}
       
    73 }
       
    74 #endif	/* Py_TRACE_REFS */
       
    75 
       
    76 #ifdef COUNT_ALLOCS
       
    77 static PyTypeObject *type_list;
       
    78 /* All types are added to type_list, at least when
       
    79    they get one object created. That makes them
       
    80    immortal, which unfortunately contributes to
       
    81    garbage itself. If unlist_types_without_objects
       
    82    is set, they will be removed from the type_list
       
    83    once the last object is deallocated. */
       
    84 int unlist_types_without_objects;
       
    85 extern int tuple_zero_allocs, fast_tuple_allocs;
       
    86 extern int quick_int_allocs, quick_neg_int_allocs;
       
    87 extern int null_strings, one_strings;
       
    88 void
       
    89 dump_counts(FILE* f)
       
    90 {
       
    91 	PyTypeObject *tp;
       
    92 
       
    93 	for (tp = type_list; tp; tp = tp->tp_next)
       
    94 		fprintf(f, "%s alloc'd: %d, freed: %d, max in use: %d\n",
       
    95 			tp->tp_name, tp->tp_allocs, tp->tp_frees,
       
    96 			tp->tp_maxalloc);
       
    97 	fprintf(f, "fast tuple allocs: %d, empty: %d\n",
       
    98 		fast_tuple_allocs, tuple_zero_allocs);
       
    99 	fprintf(f, "fast int allocs: pos: %d, neg: %d\n",
       
   100 		quick_int_allocs, quick_neg_int_allocs);
       
   101 	fprintf(f, "null strings: %d, 1-strings: %d\n",
       
   102 		null_strings, one_strings);
       
   103 }
       
   104 
       
   105 PyObject *
       
   106 get_counts(void)
       
   107 {
       
   108 	PyTypeObject *tp;
       
   109 	PyObject *result;
       
   110 	PyObject *v;
       
   111 
       
   112 	result = PyList_New(0);
       
   113 	if (result == NULL)
       
   114 		return NULL;
       
   115 	for (tp = type_list; tp; tp = tp->tp_next) {
       
   116 		v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
       
   117 				  tp->tp_frees, tp->tp_maxalloc);
       
   118 		if (v == NULL) {
       
   119 			Py_DECREF(result);
       
   120 			return NULL;
       
   121 		}
       
   122 		if (PyList_Append(result, v) < 0) {
       
   123 			Py_DECREF(v);
       
   124 			Py_DECREF(result);
       
   125 			return NULL;
       
   126 		}
       
   127 		Py_DECREF(v);
       
   128 	}
       
   129 	return result;
       
   130 }
       
   131 
       
   132 void
       
   133 inc_count(PyTypeObject *tp)
       
   134 {
       
   135 	if (tp->tp_next == NULL && tp->tp_prev == NULL) {
       
   136 		/* first time; insert in linked list */
       
   137 		if (tp->tp_next != NULL) /* sanity check */
       
   138 			Py_FatalError("XXX inc_count sanity check");
       
   139 		if (type_list)
       
   140 			type_list->tp_prev = tp;
       
   141 		tp->tp_next = type_list;
       
   142 		/* Note that as of Python 2.2, heap-allocated type objects
       
   143 		 * can go away, but this code requires that they stay alive
       
   144 		 * until program exit.  That's why we're careful with
       
   145 		 * refcounts here.  type_list gets a new reference to tp,
       
   146 		 * while ownership of the reference type_list used to hold
       
   147 		 * (if any) was transferred to tp->tp_next in the line above.
       
   148 		 * tp is thus effectively immortal after this.
       
   149 		 */
       
   150 		Py_INCREF(tp);
       
   151 		type_list = tp;
       
   152 #ifdef Py_TRACE_REFS
       
   153 		/* Also insert in the doubly-linked list of all objects,
       
   154 		 * if not already there.
       
   155 		 */
       
   156 		_Py_AddToAllObjects((PyObject *)tp, 0);
       
   157 #endif
       
   158 	}
       
   159 	tp->tp_allocs++;
       
   160 	if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
       
   161 		tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
       
   162 }
       
   163 
       
   164 void dec_count(PyTypeObject *tp)
       
   165 {
       
   166 	tp->tp_frees++;
       
   167 	if (unlist_types_without_objects &&
       
   168 	    tp->tp_allocs == tp->tp_frees) {
       
   169 		/* unlink the type from type_list */
       
   170 		if (tp->tp_prev)
       
   171 			tp->tp_prev->tp_next = tp->tp_next;
       
   172 		else
       
   173 			type_list = tp->tp_next;
       
   174 		if (tp->tp_next)
       
   175 			tp->tp_next->tp_prev = tp->tp_prev;
       
   176 		tp->tp_next = tp->tp_prev = NULL;
       
   177 		Py_DECREF(tp);
       
   178 	}
       
   179 }
       
   180 
       
   181 #endif
       
   182 
       
   183 #ifdef Py_REF_DEBUG
       
   184 /* Log a fatal error; doesn't return. */
       
   185 void
       
   186 _Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
       
   187 {
       
   188 	char buf[300];
       
   189 
       
   190 	PyOS_snprintf(buf, sizeof(buf),
       
   191 		      "%s:%i object at %p has negative ref count "
       
   192 		      "%" PY_FORMAT_SIZE_T "d",
       
   193 		      fname, lineno, op, op->ob_refcnt);
       
   194 	Py_FatalError(buf);
       
   195 }
       
   196 
       
   197 #endif /* Py_REF_DEBUG */
       
   198 
       
   199 void
       
   200 Py_IncRef(PyObject *o)
       
   201 {
       
   202     Py_XINCREF(o);
       
   203 }
       
   204 
       
   205 void
       
   206 Py_DecRef(PyObject *o)
       
   207 {
       
   208     Py_XDECREF(o);
       
   209 }
       
   210 
       
   211 PyObject *
       
   212 PyObject_Init(PyObject *op, PyTypeObject *tp)
       
   213 {
       
   214 	if (op == NULL)
       
   215 		return PyErr_NoMemory();
       
   216 	/* Any changes should be reflected in PyObject_INIT (objimpl.h) */
       
   217 	Py_TYPE(op) = tp;
       
   218 	_Py_NewReference(op);
       
   219 	return op;
       
   220 }
       
   221 
       
   222 PyVarObject *
       
   223 PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
       
   224 {
       
   225 	if (op == NULL)
       
   226 		return (PyVarObject *) PyErr_NoMemory();
       
   227 	/* Any changes should be reflected in PyObject_INIT_VAR */
       
   228 	op->ob_size = size;
       
   229 	Py_TYPE(op) = tp;
       
   230 	_Py_NewReference((PyObject *)op);
       
   231 	return op;
       
   232 }
       
   233 
       
   234 PyObject *
       
   235 _PyObject_New(PyTypeObject *tp)
       
   236 {
       
   237 	PyObject *op;
       
   238 	op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));
       
   239 	if (op == NULL)
       
   240 		return PyErr_NoMemory();
       
   241 	return PyObject_INIT(op, tp);
       
   242 }
       
   243 
       
   244 PyVarObject *
       
   245 _PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
       
   246 {
       
   247 	PyVarObject *op;
       
   248 	const size_t size = _PyObject_VAR_SIZE(tp, nitems);
       
   249 	op = (PyVarObject *) PyObject_MALLOC(size);
       
   250 	if (op == NULL)
       
   251 		return (PyVarObject *)PyErr_NoMemory();
       
   252 	return PyObject_INIT_VAR(op, tp, nitems);
       
   253 }
       
   254 
       
   255 /* for binary compatibility with 2.2 */
       
   256 #undef _PyObject_Del
       
   257 void
       
   258 _PyObject_Del(PyObject *op)
       
   259 {
       
   260 	PyObject_FREE(op);
       
   261 }
       
   262 
       
   263 /* Implementation of PyObject_Print with recursion checking */
       
   264 static int
       
   265 internal_print(PyObject *op, FILE *fp, int flags, int nesting)
       
   266 {
       
   267 	int ret = 0;
       
   268 	if (nesting > 10) {
       
   269 		PyErr_SetString(PyExc_RuntimeError, "print recursion");
       
   270 		return -1;
       
   271 	}
       
   272 	if (PyErr_CheckSignals())
       
   273 		return -1;
       
   274 #ifdef USE_STACKCHECK
       
   275 	if (PyOS_CheckStack()) {
       
   276 		PyErr_SetString(PyExc_MemoryError, "stack overflow");
       
   277 		return -1;
       
   278 	}
       
   279 #endif
       
   280 	clearerr(fp); /* Clear any previous error condition */
       
   281 	if (op == NULL) {
       
   282 		Py_BEGIN_ALLOW_THREADS
       
   283 		fprintf(fp, "<nil>");
       
   284 		Py_END_ALLOW_THREADS
       
   285 	}
       
   286 	else {
       
   287 		if (op->ob_refcnt <= 0)
       
   288 			/* XXX(twouters) cast refcount to long until %zd is
       
   289 			   universally available */
       
   290 			Py_BEGIN_ALLOW_THREADS
       
   291 			fprintf(fp, "<refcnt %ld at %p>",
       
   292 				(long)op->ob_refcnt, op);
       
   293 			Py_END_ALLOW_THREADS
       
   294 		else if (Py_TYPE(op)->tp_print == NULL) {
       
   295 			PyObject *s;
       
   296 			if (flags & Py_PRINT_RAW)
       
   297 				s = PyObject_Str(op);
       
   298 			else
       
   299 				s = PyObject_Repr(op);
       
   300 			if (s == NULL)
       
   301 				ret = -1;
       
   302 			else {
       
   303 				ret = internal_print(s, fp, Py_PRINT_RAW,
       
   304 						     nesting+1);
       
   305 			}
       
   306 			Py_XDECREF(s);
       
   307 		}
       
   308 		else
       
   309 			ret = (*Py_TYPE(op)->tp_print)(op, fp, flags);
       
   310 	}
       
   311 	if (ret == 0) {
       
   312 		if (ferror(fp)) {
       
   313 			PyErr_SetFromErrno(PyExc_IOError);
       
   314 			clearerr(fp);
       
   315 			ret = -1;
       
   316 		}
       
   317 	}
       
   318 	return ret;
       
   319 }
       
   320 
       
   321 int
       
   322 PyObject_Print(PyObject *op, FILE *fp, int flags)
       
   323 {
       
   324 	return internal_print(op, fp, flags, 0);
       
   325 }
       
   326 
       
   327 
       
   328 /* For debugging convenience.  See Misc/gdbinit for some useful gdb hooks */
       
   329 void _PyObject_Dump(PyObject* op)
       
   330 {
       
   331 	if (op == NULL)
       
   332 		fprintf(stderr, "NULL\n");
       
   333 	else {
       
   334 		fprintf(stderr, "object  : ");
       
   335 		(void)PyObject_Print(op, stderr, 0);
       
   336 		/* XXX(twouters) cast refcount to long until %zd is
       
   337 		   universally available */
       
   338 		fprintf(stderr, "\n"
       
   339 			"type    : %s\n"
       
   340 			"refcount: %ld\n"
       
   341 			"address : %p\n",
       
   342 			Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name,
       
   343 			(long)op->ob_refcnt,
       
   344 			op);
       
   345 	}
       
   346 }
       
   347 
       
   348 PyObject *
       
   349 PyObject_Repr(PyObject *v)
       
   350 {
       
   351 	if (PyErr_CheckSignals())
       
   352 		return NULL;
       
   353 #ifdef USE_STACKCHECK
       
   354 	if (PyOS_CheckStack()) {
       
   355 		PyErr_SetString(PyExc_MemoryError, "stack overflow");
       
   356 		return NULL;
       
   357 	}
       
   358 #endif
       
   359 	if (v == NULL)
       
   360 		return PyString_FromString("<NULL>");
       
   361 	else if (Py_TYPE(v)->tp_repr == NULL)
       
   362 		return PyString_FromFormat("<%s object at %p>",
       
   363 					   Py_TYPE(v)->tp_name, v);
       
   364 	else {
       
   365 		PyObject *res;
       
   366 		res = (*Py_TYPE(v)->tp_repr)(v);
       
   367 		if (res == NULL)
       
   368 			return NULL;
       
   369 #ifdef Py_USING_UNICODE
       
   370 		if (PyUnicode_Check(res)) {
       
   371 			PyObject* str;
       
   372 			str = PyUnicode_AsEncodedString(res, NULL, NULL);
       
   373 			Py_DECREF(res);
       
   374 			if (str)
       
   375 				res = str;
       
   376 			else
       
   377 				return NULL;
       
   378 		}
       
   379 #endif
       
   380 		if (!PyString_Check(res)) {
       
   381 			PyErr_Format(PyExc_TypeError,
       
   382 				     "__repr__ returned non-string (type %.200s)",
       
   383 				     Py_TYPE(res)->tp_name);
       
   384 			Py_DECREF(res);
       
   385 			return NULL;
       
   386 		}
       
   387 		return res;
       
   388 	}
       
   389 }
       
   390 
       
   391 PyObject *
       
   392 _PyObject_Str(PyObject *v)
       
   393 {
       
   394 	PyObject *res;
       
   395 	int type_ok;
       
   396 	if (v == NULL)
       
   397 		return PyString_FromString("<NULL>");
       
   398 	if (PyString_CheckExact(v)) {
       
   399 		Py_INCREF(v);
       
   400 		return v;
       
   401 	}
       
   402 #ifdef Py_USING_UNICODE
       
   403 	if (PyUnicode_CheckExact(v)) {
       
   404 		Py_INCREF(v);
       
   405 		return v;
       
   406 	}
       
   407 #endif
       
   408 	if (Py_TYPE(v)->tp_str == NULL)
       
   409 		return PyObject_Repr(v);
       
   410 
       
   411 	/* It is possible for a type to have a tp_str representation that loops
       
   412 	   infinitely. */
       
   413 	if (Py_EnterRecursiveCall(" while getting the str of an object"))
       
   414 		return NULL;
       
   415 	res = (*Py_TYPE(v)->tp_str)(v);
       
   416 	Py_LeaveRecursiveCall();
       
   417 	if (res == NULL)
       
   418 		return NULL;
       
   419 	type_ok = PyString_Check(res);
       
   420 #ifdef Py_USING_UNICODE
       
   421 	type_ok = type_ok || PyUnicode_Check(res);
       
   422 #endif
       
   423 	if (!type_ok) {
       
   424 		PyErr_Format(PyExc_TypeError,
       
   425 			     "__str__ returned non-string (type %.200s)",
       
   426 			     Py_TYPE(res)->tp_name);
       
   427 		Py_DECREF(res);
       
   428 		return NULL;
       
   429 	}
       
   430 	return res;
       
   431 }
       
   432 
       
   433 PyObject *
       
   434 PyObject_Str(PyObject *v)
       
   435 {
       
   436 	PyObject *res = _PyObject_Str(v);
       
   437 	if (res == NULL)
       
   438 		return NULL;
       
   439 #ifdef Py_USING_UNICODE
       
   440 	if (PyUnicode_Check(res)) {
       
   441 		PyObject* str;
       
   442 		str = PyUnicode_AsEncodedString(res, NULL, NULL);
       
   443 		Py_DECREF(res);
       
   444 		if (str)
       
   445 			res = str;
       
   446 		else
       
   447 		    	return NULL;
       
   448 	}
       
   449 #endif
       
   450 	assert(PyString_Check(res));
       
   451 	return res;
       
   452 }
       
   453 
       
   454 #ifdef Py_USING_UNICODE
       
   455 PyObject *
       
   456 PyObject_Unicode(PyObject *v)
       
   457 {
       
   458 	PyObject *res;
       
   459 	PyObject *func;
       
   460 	PyObject *str;
       
   461 	int unicode_method_found = 0;
       
   462 	static PyObject *unicodestr;
       
   463 
       
   464 	if (v == NULL) {
       
   465 		res = PyString_FromString("<NULL>");
       
   466 		if (res == NULL)
       
   467 			return NULL;
       
   468 		str = PyUnicode_FromEncodedObject(res, NULL, "strict");
       
   469 		Py_DECREF(res);
       
   470 		return str;
       
   471 	} else if (PyUnicode_CheckExact(v)) {
       
   472 		Py_INCREF(v);
       
   473 		return v;
       
   474 	}
       
   475 
       
   476 	/* Try the __unicode__ method */
       
   477 	if (unicodestr == NULL) {
       
   478 		unicodestr= PyString_InternFromString("__unicode__");
       
   479 		if (unicodestr == NULL)
       
   480 			return NULL;
       
   481 	}
       
   482 	if (PyInstance_Check(v)) {
       
   483 		/* We're an instance of a classic class */
       
   484 		/* Try __unicode__ from the instance -- alas we have no type */
       
   485 		func = PyObject_GetAttr(v, unicodestr);
       
   486 		if (func != NULL) {
       
   487 			unicode_method_found = 1;
       
   488 			res = PyObject_CallFunctionObjArgs(func, NULL);
       
   489 			Py_DECREF(func);
       
   490 		}
       
   491 		else {
       
   492 			PyErr_Clear(); 
       
   493 		}
       
   494 	}
       
   495 	else {
       
   496 		/* Not a classic class instance, try __unicode__ from type */
       
   497 		/* _PyType_Lookup doesn't create a reference */
       
   498 		func = _PyType_Lookup(Py_TYPE(v), unicodestr);
       
   499 		if (func != NULL) {
       
   500 			unicode_method_found = 1;
       
   501 			res = PyObject_CallFunctionObjArgs(func, v, NULL);
       
   502 		}
       
   503 		else {
       
   504 			PyErr_Clear();
       
   505 		}
       
   506 	}
       
   507 
       
   508 	/* Didn't find __unicode__ */
       
   509 	if (!unicode_method_found) {
       
   510 		if (PyUnicode_Check(v)) {
       
   511 			/* For a Unicode subtype that's didn't overwrite __unicode__,
       
   512 			   return a true Unicode object with the same data. */
       
   513 			return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(v),
       
   514 						     PyUnicode_GET_SIZE(v));
       
   515 		}
       
   516 		if (PyString_CheckExact(v)) {
       
   517 			Py_INCREF(v);
       
   518 			res = v;
       
   519 		}
       
   520 		else {
       
   521 			if (Py_TYPE(v)->tp_str != NULL)
       
   522 				res = (*Py_TYPE(v)->tp_str)(v);
       
   523 			else
       
   524 				res = PyObject_Repr(v);
       
   525 		}
       
   526 	}
       
   527 
       
   528 	if (res == NULL)
       
   529 		return NULL;
       
   530 	if (!PyUnicode_Check(res)) {
       
   531 		str = PyUnicode_FromEncodedObject(res, NULL, "strict");
       
   532 		Py_DECREF(res);
       
   533 		res = str;
       
   534 	}
       
   535 	return res;
       
   536 }
       
   537 #endif
       
   538 
       
   539 
       
   540 /* Helper to warn about deprecated tp_compare return values.  Return:
       
   541    -2 for an exception;
       
   542    -1 if v <  w;
       
   543     0 if v == w;
       
   544     1 if v  > w.
       
   545    (This function cannot return 2.)
       
   546 */
       
   547 static int
       
   548 adjust_tp_compare(int c)
       
   549 {
       
   550 	if (PyErr_Occurred()) {
       
   551 		if (c != -1 && c != -2) {
       
   552 			PyObject *t, *v, *tb;
       
   553 			PyErr_Fetch(&t, &v, &tb);
       
   554 			if (PyErr_Warn(PyExc_RuntimeWarning,
       
   555 				       "tp_compare didn't return -1 or -2 "
       
   556 				       "for exception") < 0) {
       
   557 				Py_XDECREF(t);
       
   558 				Py_XDECREF(v);
       
   559 				Py_XDECREF(tb);
       
   560 			}
       
   561 			else
       
   562 				PyErr_Restore(t, v, tb);
       
   563 		}
       
   564 		return -2;
       
   565 	}
       
   566 	else if (c < -1 || c > 1) {
       
   567 		if (PyErr_Warn(PyExc_RuntimeWarning,
       
   568 			       "tp_compare didn't return -1, 0 or 1") < 0)
       
   569 			return -2;
       
   570 		else
       
   571 			return c < -1 ? -1 : 1;
       
   572 	}
       
   573 	else {
       
   574 		assert(c >= -1 && c <= 1);
       
   575 		return c;
       
   576 	}
       
   577 }
       
   578 
       
   579 
       
   580 /* Macro to get the tp_richcompare field of a type if defined */
       
   581 #define RICHCOMPARE(t) (PyType_HasFeature((t), Py_TPFLAGS_HAVE_RICHCOMPARE) \
       
   582                          ? (t)->tp_richcompare : NULL)
       
   583 
       
   584 /* Map rich comparison operators to their swapped version, e.g. LT --> GT */
       
   585 int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE};
       
   586 
       
   587 /* Try a genuine rich comparison, returning an object.  Return:
       
   588    NULL for exception;
       
   589    NotImplemented if this particular rich comparison is not implemented or
       
   590      undefined;
       
   591    some object not equal to NotImplemented if it is implemented
       
   592      (this latter object may not be a Boolean).
       
   593 */
       
   594 static PyObject *
       
   595 try_rich_compare(PyObject *v, PyObject *w, int op)
       
   596 {
       
   597 	richcmpfunc f;
       
   598 	PyObject *res;
       
   599 
       
   600 	if (v->ob_type != w->ob_type &&
       
   601 	    PyType_IsSubtype(w->ob_type, v->ob_type) &&
       
   602 	    (f = RICHCOMPARE(w->ob_type)) != NULL) {
       
   603 		res = (*f)(w, v, _Py_SwappedOp[op]);
       
   604 		if (res != Py_NotImplemented)
       
   605 			return res;
       
   606 		Py_DECREF(res);
       
   607 	}
       
   608 	if ((f = RICHCOMPARE(v->ob_type)) != NULL) {
       
   609 		res = (*f)(v, w, op);
       
   610 		if (res != Py_NotImplemented)
       
   611 			return res;
       
   612 		Py_DECREF(res);
       
   613 	}
       
   614 	if ((f = RICHCOMPARE(w->ob_type)) != NULL) {
       
   615 		return (*f)(w, v, _Py_SwappedOp[op]);
       
   616 	}
       
   617 	res = Py_NotImplemented;
       
   618 	Py_INCREF(res);
       
   619 	return res;
       
   620 }
       
   621 
       
   622 /* Try a genuine rich comparison, returning an int.  Return:
       
   623    -1 for exception (including the case where try_rich_compare() returns an
       
   624       object that's not a Boolean);
       
   625     0 if the outcome is false;
       
   626     1 if the outcome is true;
       
   627     2 if this particular rich comparison is not implemented or undefined.
       
   628 */
       
   629 static int
       
   630 try_rich_compare_bool(PyObject *v, PyObject *w, int op)
       
   631 {
       
   632 	PyObject *res;
       
   633 	int ok;
       
   634 
       
   635 	if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL)
       
   636 		return 2; /* Shortcut, avoid INCREF+DECREF */
       
   637 	res = try_rich_compare(v, w, op);
       
   638 	if (res == NULL)
       
   639 		return -1;
       
   640 	if (res == Py_NotImplemented) {
       
   641 		Py_DECREF(res);
       
   642 		return 2;
       
   643 	}
       
   644 	ok = PyObject_IsTrue(res);
       
   645 	Py_DECREF(res);
       
   646 	return ok;
       
   647 }
       
   648 
       
   649 /* Try rich comparisons to determine a 3-way comparison.  Return:
       
   650    -2 for an exception;
       
   651    -1 if v  < w;
       
   652     0 if v == w;
       
   653     1 if v  > w;
       
   654     2 if this particular rich comparison is not implemented or undefined.
       
   655 */
       
   656 static int
       
   657 try_rich_to_3way_compare(PyObject *v, PyObject *w)
       
   658 {
       
   659 	static struct { int op; int outcome; } tries[3] = {
       
   660 		/* Try this operator, and if it is true, use this outcome: */
       
   661 		{Py_EQ, 0},
       
   662 		{Py_LT, -1},
       
   663 		{Py_GT, 1},
       
   664 	};
       
   665 	int i;
       
   666 
       
   667 	if (RICHCOMPARE(v->ob_type) == NULL && RICHCOMPARE(w->ob_type) == NULL)
       
   668 		return 2; /* Shortcut */
       
   669 
       
   670 	for (i = 0; i < 3; i++) {
       
   671 		switch (try_rich_compare_bool(v, w, tries[i].op)) {
       
   672 		case -1:
       
   673 			return -2;
       
   674 		case 1:
       
   675 			return tries[i].outcome;
       
   676 		}
       
   677 	}
       
   678 
       
   679 	return 2;
       
   680 }
       
   681 
       
   682 /* Try a 3-way comparison, returning an int.  Return:
       
   683    -2 for an exception;
       
   684    -1 if v <  w;
       
   685     0 if v == w;
       
   686     1 if v  > w;
       
   687     2 if this particular 3-way comparison is not implemented or undefined.
       
   688 */
       
   689 static int
       
   690 try_3way_compare(PyObject *v, PyObject *w)
       
   691 {
       
   692 	int c;
       
   693 	cmpfunc f;
       
   694 
       
   695 	/* Comparisons involving instances are given to instance_compare,
       
   696 	   which has the same return conventions as this function. */
       
   697 
       
   698 	f = v->ob_type->tp_compare;
       
   699 	if (PyInstance_Check(v))
       
   700 		return (*f)(v, w);
       
   701 	if (PyInstance_Check(w))
       
   702 		return (*w->ob_type->tp_compare)(v, w);
       
   703 
       
   704 	/* If both have the same (non-NULL) tp_compare, use it. */
       
   705 	if (f != NULL && f == w->ob_type->tp_compare) {
       
   706 		c = (*f)(v, w);
       
   707 		return adjust_tp_compare(c);
       
   708 	}
       
   709 
       
   710 	/* If either tp_compare is _PyObject_SlotCompare, that's safe. */
       
   711 	if (f == _PyObject_SlotCompare ||
       
   712 	    w->ob_type->tp_compare == _PyObject_SlotCompare)
       
   713 		return _PyObject_SlotCompare(v, w);
       
   714 
       
   715 	/* If we're here, v and w,
       
   716 	    a) are not instances;
       
   717 	    b) have different types or a type without tp_compare; and
       
   718 	    c) don't have a user-defined tp_compare.
       
   719 	   tp_compare implementations in C assume that both arguments
       
   720 	   have their type, so we give up if the coercion fails or if
       
   721 	   it yields types which are still incompatible (which can
       
   722 	   happen with a user-defined nb_coerce).
       
   723 	*/
       
   724 	c = PyNumber_CoerceEx(&v, &w);
       
   725 	if (c < 0)
       
   726 		return -2;
       
   727 	if (c > 0)
       
   728 		return 2;
       
   729 	f = v->ob_type->tp_compare;
       
   730 	if (f != NULL && f == w->ob_type->tp_compare) {
       
   731 		c = (*f)(v, w);
       
   732 		Py_DECREF(v);
       
   733 		Py_DECREF(w);
       
   734 		return adjust_tp_compare(c);
       
   735 	}
       
   736 
       
   737 	/* No comparison defined */
       
   738 	Py_DECREF(v);
       
   739 	Py_DECREF(w);
       
   740 	return 2;
       
   741 }
       
   742 
       
   743 /* Final fallback 3-way comparison, returning an int.  Return:
       
   744    -2 if an error occurred;
       
   745    -1 if v <  w;
       
   746     0 if v == w;
       
   747     1 if v >  w.
       
   748 */
       
   749 static int
       
   750 default_3way_compare(PyObject *v, PyObject *w)
       
   751 {
       
   752 	int c;
       
   753 	const char *vname, *wname;
       
   754 
       
   755 	if (v->ob_type == w->ob_type) {
       
   756 		/* When comparing these pointers, they must be cast to
       
   757 		 * integer types (i.e. Py_uintptr_t, our spelling of C9X's
       
   758 		 * uintptr_t).  ANSI specifies that pointer compares other
       
   759 		 * than == and != to non-related structures are undefined.
       
   760 		 */
       
   761 		Py_uintptr_t vv = (Py_uintptr_t)v;
       
   762 		Py_uintptr_t ww = (Py_uintptr_t)w;
       
   763 		return (vv < ww) ? -1 : (vv > ww) ? 1 : 0;
       
   764 	}
       
   765 
       
   766 	/* None is smaller than anything */
       
   767 	if (v == Py_None)
       
   768 		return -1;
       
   769 	if (w == Py_None)
       
   770 		return 1;
       
   771 
       
   772 	/* different type: compare type names; numbers are smaller */
       
   773 	if (PyNumber_Check(v))
       
   774 		vname = "";
       
   775 	else
       
   776 		vname = v->ob_type->tp_name;
       
   777 	if (PyNumber_Check(w))
       
   778 		wname = "";
       
   779 	else
       
   780 		wname = w->ob_type->tp_name;
       
   781 	c = strcmp(vname, wname);
       
   782 	if (c < 0)
       
   783 		return -1;
       
   784 	if (c > 0)
       
   785 		return 1;
       
   786 	/* Same type name, or (more likely) incomparable numeric types */
       
   787 	return ((Py_uintptr_t)(v->ob_type) < (
       
   788 		Py_uintptr_t)(w->ob_type)) ? -1 : 1;
       
   789 }
       
   790 
       
   791 /* Do a 3-way comparison, by hook or by crook.  Return:
       
   792    -2 for an exception (but see below);
       
   793    -1 if v <  w;
       
   794     0 if v == w;
       
   795     1 if v >  w;
       
   796    BUT: if the object implements a tp_compare function, it returns
       
   797    whatever this function returns (whether with an exception or not).
       
   798 */
       
   799 static int
       
   800 do_cmp(PyObject *v, PyObject *w)
       
   801 {
       
   802 	int c;
       
   803 	cmpfunc f;
       
   804 
       
   805 	if (v->ob_type == w->ob_type
       
   806 	    && (f = v->ob_type->tp_compare) != NULL) {
       
   807 		c = (*f)(v, w);
       
   808 		if (PyInstance_Check(v)) {
       
   809 			/* Instance tp_compare has a different signature.
       
   810 			   But if it returns undefined we fall through. */
       
   811 			if (c != 2)
       
   812 				return c;
       
   813 			/* Else fall through to try_rich_to_3way_compare() */
       
   814 		}
       
   815 		else
       
   816 			return adjust_tp_compare(c);
       
   817 	}
       
   818 	/* We only get here if one of the following is true:
       
   819 	   a) v and w have different types
       
   820 	   b) v and w have the same type, which doesn't have tp_compare
       
   821 	   c) v and w are instances, and either __cmp__ is not defined or
       
   822 	      __cmp__ returns NotImplemented
       
   823 	*/
       
   824 	c = try_rich_to_3way_compare(v, w);
       
   825 	if (c < 2)
       
   826 		return c;
       
   827 	c = try_3way_compare(v, w);
       
   828 	if (c < 2)
       
   829 		return c;
       
   830 	return default_3way_compare(v, w);
       
   831 }
       
   832 
       
   833 /* Compare v to w.  Return
       
   834    -1 if v <  w or exception (PyErr_Occurred() true in latter case).
       
   835     0 if v == w.
       
   836     1 if v > w.
       
   837    XXX The docs (C API manual) say the return value is undefined in case
       
   838    XXX of error.
       
   839 */
       
   840 int
       
   841 PyObject_Compare(PyObject *v, PyObject *w)
       
   842 {
       
   843 	int result;
       
   844 
       
   845 	if (v == NULL || w == NULL) {
       
   846 		PyErr_BadInternalCall();
       
   847 		return -1;
       
   848 	}
       
   849 	if (v == w)
       
   850 		return 0;
       
   851 	if (Py_EnterRecursiveCall(" in cmp"))
       
   852 		return -1;
       
   853 	result = do_cmp(v, w);
       
   854 	Py_LeaveRecursiveCall();
       
   855 	return result < 0 ? -1 : result;
       
   856 }
       
   857 
       
   858 /* Return (new reference to) Py_True or Py_False. */
       
   859 static PyObject *
       
   860 convert_3way_to_object(int op, int c)
       
   861 {
       
   862 	PyObject *result;
       
   863 	switch (op) {
       
   864 	case Py_LT: c = c <  0; break;
       
   865 	case Py_LE: c = c <= 0; break;
       
   866 	case Py_EQ: c = c == 0; break;
       
   867 	case Py_NE: c = c != 0; break;
       
   868 	case Py_GT: c = c >  0; break;
       
   869 	case Py_GE: c = c >= 0; break;
       
   870 	}
       
   871 	result = c ? Py_True : Py_False;
       
   872 	Py_INCREF(result);
       
   873 	return result;
       
   874 }
       
   875 
       
   876 /* We want a rich comparison but don't have one.  Try a 3-way cmp instead.
       
   877    Return
       
   878    NULL      if error
       
   879    Py_True   if v op w
       
   880    Py_False  if not (v op w)
       
   881 */
       
   882 static PyObject *
       
   883 try_3way_to_rich_compare(PyObject *v, PyObject *w, int op)
       
   884 {
       
   885 	int c;
       
   886 
       
   887 	c = try_3way_compare(v, w);
       
   888 	if (c >= 2) {
       
   889 
       
   890 		/* Py3K warning if types are not equal and comparison isn't == or !=  */
       
   891 		if (Py_Py3kWarningFlag &&
       
   892 		    v->ob_type != w->ob_type && op != Py_EQ && op != Py_NE &&
       
   893 		    PyErr_WarnEx(PyExc_DeprecationWarning,
       
   894 			       "comparing unequal types not supported "
       
   895 			       "in 3.x", 1) < 0) {
       
   896 			return NULL;
       
   897 		}
       
   898 
       
   899 		c = default_3way_compare(v, w);
       
   900 	}
       
   901 	if (c <= -2)
       
   902 		return NULL;
       
   903 	return convert_3way_to_object(op, c);
       
   904 }
       
   905 
       
   906 /* Do rich comparison on v and w.  Return
       
   907    NULL      if error
       
   908    Else a new reference to an object other than Py_NotImplemented, usually(?):
       
   909    Py_True   if v op w
       
   910    Py_False  if not (v op w)
       
   911 */
       
   912 static PyObject *
       
   913 do_richcmp(PyObject *v, PyObject *w, int op)
       
   914 {
       
   915 	PyObject *res;
       
   916 
       
   917 	res = try_rich_compare(v, w, op);
       
   918 	if (res != Py_NotImplemented)
       
   919 		return res;
       
   920 	Py_DECREF(res);
       
   921 
       
   922 	return try_3way_to_rich_compare(v, w, op);
       
   923 }
       
   924 
       
   925 /* Return:
       
   926    NULL for exception;
       
   927    some object not equal to NotImplemented if it is implemented
       
   928      (this latter object may not be a Boolean).
       
   929 */
       
   930 PyObject *
       
   931 PyObject_RichCompare(PyObject *v, PyObject *w, int op)
       
   932 {
       
   933 	PyObject *res;
       
   934 
       
   935 	assert(Py_LT <= op && op <= Py_GE);
       
   936 	if (Py_EnterRecursiveCall(" in cmp"))
       
   937 		return NULL;
       
   938 
       
   939 	/* If the types are equal, and not old-style instances, try to
       
   940 	   get out cheap (don't bother with coercions etc.). */
       
   941 	if (v->ob_type == w->ob_type && !PyInstance_Check(v)) {
       
   942 		cmpfunc fcmp;
       
   943 		richcmpfunc frich = RICHCOMPARE(v->ob_type);
       
   944 		/* If the type has richcmp, try it first.  try_rich_compare
       
   945 		   tries it two-sided, which is not needed since we've a
       
   946 		   single type only. */
       
   947 		if (frich != NULL) {
       
   948 			res = (*frich)(v, w, op);
       
   949 			if (res != Py_NotImplemented)
       
   950 				goto Done;
       
   951 			Py_DECREF(res);
       
   952 		}
       
   953 		/* No richcmp, or this particular richmp not implemented.
       
   954 		   Try 3-way cmp. */
       
   955 		fcmp = v->ob_type->tp_compare;
       
   956 		if (fcmp != NULL) {
       
   957 			int c = (*fcmp)(v, w);
       
   958 			c = adjust_tp_compare(c);
       
   959 			if (c == -2) {
       
   960 				res = NULL;
       
   961 				goto Done;
       
   962 			}
       
   963 			res = convert_3way_to_object(op, c);
       
   964 			goto Done;
       
   965 		}
       
   966 	}
       
   967 
       
   968 	/* Fast path not taken, or couldn't deliver a useful result. */
       
   969 	res = do_richcmp(v, w, op);
       
   970 Done:
       
   971 	Py_LeaveRecursiveCall();
       
   972 	return res;
       
   973 }
       
   974 
       
   975 /* Return -1 if error; 1 if v op w; 0 if not (v op w). */
       
   976 int
       
   977 PyObject_RichCompareBool(PyObject *v, PyObject *w, int op)
       
   978 {
       
   979 	PyObject *res;
       
   980 	int ok;
       
   981 
       
   982 	/* Quick result when objects are the same.
       
   983 	   Guarantees that identity implies equality. */
       
   984 	if (v == w) {
       
   985 		if (op == Py_EQ)
       
   986 			return 1;
       
   987 		else if (op == Py_NE)
       
   988 			return 0;
       
   989 	}
       
   990 
       
   991 	res = PyObject_RichCompare(v, w, op);
       
   992 	if (res == NULL)
       
   993 		return -1;
       
   994 	if (PyBool_Check(res))
       
   995 		ok = (res == Py_True);
       
   996 	else
       
   997 		ok = PyObject_IsTrue(res);
       
   998 	Py_DECREF(res);
       
   999 	return ok;
       
  1000 }
       
  1001 
       
  1002 /* Set of hash utility functions to help maintaining the invariant that
       
  1003 	if a==b then hash(a)==hash(b)
       
  1004 
       
  1005    All the utility functions (_Py_Hash*()) return "-1" to signify an error.
       
  1006 */
       
  1007 
       
  1008 long
       
  1009 _Py_HashDouble(double v)
       
  1010 {
       
  1011 	double intpart, fractpart;
       
  1012 	int expo;
       
  1013 	long hipart;
       
  1014 	long x;		/* the final hash value */
       
  1015 	/* This is designed so that Python numbers of different types
       
  1016 	 * that compare equal hash to the same value; otherwise comparisons
       
  1017 	 * of mapping keys will turn out weird.
       
  1018 	 */
       
  1019 
       
  1020 	fractpart = modf(v, &intpart);
       
  1021 	if (fractpart == 0.0) {
       
  1022 		/* This must return the same hash as an equal int or long. */
       
  1023 		if (intpart > LONG_MAX || -intpart > LONG_MAX) {
       
  1024 			/* Convert to long and use its hash. */
       
  1025 			PyObject *plong;	/* converted to Python long */
       
  1026 			if (Py_IS_INFINITY(intpart))
       
  1027 				/* can't convert to long int -- arbitrary */
       
  1028 				v = v < 0 ? -271828.0 : 314159.0;
       
  1029 			plong = PyLong_FromDouble(v);
       
  1030 			if (plong == NULL)
       
  1031 				return -1;
       
  1032 			x = PyObject_Hash(plong);
       
  1033 			Py_DECREF(plong);
       
  1034 			return x;
       
  1035 		}
       
  1036 		/* Fits in a C long == a Python int, so is its own hash. */
       
  1037 		x = (long)intpart;
       
  1038 		if (x == -1)
       
  1039 			x = -2;
       
  1040 		return x;
       
  1041 	}
       
  1042 	/* The fractional part is non-zero, so we don't have to worry about
       
  1043 	 * making this match the hash of some other type.
       
  1044 	 * Use frexp to get at the bits in the double.
       
  1045 	 * Since the VAX D double format has 56 mantissa bits, which is the
       
  1046 	 * most of any double format in use, each of these parts may have as
       
  1047 	 * many as (but no more than) 56 significant bits.
       
  1048 	 * So, assuming sizeof(long) >= 4, each part can be broken into two
       
  1049 	 * longs; frexp and multiplication are used to do that.
       
  1050 	 * Also, since the Cray double format has 15 exponent bits, which is
       
  1051 	 * the most of any double format in use, shifting the exponent field
       
  1052 	 * left by 15 won't overflow a long (again assuming sizeof(long) >= 4).
       
  1053 	 */
       
  1054 	v = frexp(v, &expo);
       
  1055 	v *= 2147483648.0;	/* 2**31 */
       
  1056 	hipart = (long)v;	/* take the top 32 bits */
       
  1057 	v = (v - (double)hipart) * 2147483648.0; /* get the next 32 bits */
       
  1058 	x = hipart + (long)v + (expo << 15);
       
  1059 	if (x == -1)
       
  1060 		x = -2;
       
  1061 	return x;
       
  1062 }
       
  1063 
       
  1064 long
       
  1065 _Py_HashPointer(void *p)
       
  1066 {
       
  1067 #if SIZEOF_LONG >= SIZEOF_VOID_P
       
  1068 	return (long)p;
       
  1069 #else
       
  1070 	/* convert to a Python long and hash that */
       
  1071 	PyObject* longobj;
       
  1072 	long x;
       
  1073 
       
  1074 	if ((longobj = PyLong_FromVoidPtr(p)) == NULL) {
       
  1075 		x = -1;
       
  1076 		goto finally;
       
  1077 	}
       
  1078 	x = PyObject_Hash(longobj);
       
  1079 
       
  1080 finally:
       
  1081 	Py_XDECREF(longobj);
       
  1082 	return x;
       
  1083 #endif
       
  1084 }
       
  1085 
       
  1086 long
       
  1087 PyObject_HashNotImplemented(PyObject *self)
       
  1088 {
       
  1089 	PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'",
       
  1090 		     self->ob_type->tp_name);
       
  1091 	return -1;
       
  1092 }
       
  1093 
       
  1094 long
       
  1095 PyObject_Hash(PyObject *v)
       
  1096 {
       
  1097 	PyTypeObject *tp = v->ob_type;
       
  1098 	if (tp->tp_hash != NULL)
       
  1099 		return (*tp->tp_hash)(v);
       
  1100 	if (tp->tp_compare == NULL && RICHCOMPARE(tp) == NULL) {
       
  1101 		return _Py_HashPointer(v); /* Use address as hash value */
       
  1102 	}
       
  1103 	/* If there's a cmp but no hash defined, the object can't be hashed */
       
  1104 	return PyObject_HashNotImplemented(v);
       
  1105 }
       
  1106 
       
  1107 PyObject *
       
  1108 PyObject_GetAttrString(PyObject *v, const char *name)
       
  1109 {
       
  1110 	PyObject *w, *res;
       
  1111 
       
  1112 	if (Py_TYPE(v)->tp_getattr != NULL)
       
  1113 		return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
       
  1114 	w = PyString_InternFromString(name);
       
  1115 	if (w == NULL)
       
  1116 		return NULL;
       
  1117 	res = PyObject_GetAttr(v, w);
       
  1118 	Py_XDECREF(w);
       
  1119 	return res;
       
  1120 }
       
  1121 
       
  1122 int
       
  1123 PyObject_HasAttrString(PyObject *v, const char *name)
       
  1124 {
       
  1125 	PyObject *res = PyObject_GetAttrString(v, name);
       
  1126 	if (res != NULL) {
       
  1127 		Py_DECREF(res);
       
  1128 		return 1;
       
  1129 	}
       
  1130 	PyErr_Clear();
       
  1131 	return 0;
       
  1132 }
       
  1133 
       
  1134 int
       
  1135 PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w)
       
  1136 {
       
  1137 	PyObject *s;
       
  1138 	int res;
       
  1139 
       
  1140 	if (Py_TYPE(v)->tp_setattr != NULL)
       
  1141 		return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
       
  1142 	s = PyString_InternFromString(name);
       
  1143 	if (s == NULL)
       
  1144 		return -1;
       
  1145 	res = PyObject_SetAttr(v, s, w);
       
  1146 	Py_XDECREF(s);
       
  1147 	return res;
       
  1148 }
       
  1149 
       
  1150 PyObject *
       
  1151 PyObject_GetAttr(PyObject *v, PyObject *name)
       
  1152 {
       
  1153 	PyTypeObject *tp = Py_TYPE(v);
       
  1154 
       
  1155 	if (!PyString_Check(name)) {
       
  1156 #ifdef Py_USING_UNICODE
       
  1157 		/* The Unicode to string conversion is done here because the
       
  1158 		   existing tp_getattro slots expect a string object as name
       
  1159 		   and we wouldn't want to break those. */
       
  1160 		if (PyUnicode_Check(name)) {
       
  1161 			name = _PyUnicode_AsDefaultEncodedString(name, NULL);
       
  1162 			if (name == NULL)
       
  1163 				return NULL;
       
  1164 		}
       
  1165 		else
       
  1166 #endif
       
  1167 		{
       
  1168 			PyErr_Format(PyExc_TypeError,
       
  1169 				     "attribute name must be string, not '%.200s'",
       
  1170 				     Py_TYPE(name)->tp_name);
       
  1171 			return NULL;
       
  1172 		}
       
  1173 	}
       
  1174 	if (tp->tp_getattro != NULL)
       
  1175 		return (*tp->tp_getattro)(v, name);
       
  1176 	if (tp->tp_getattr != NULL)
       
  1177 		return (*tp->tp_getattr)(v, PyString_AS_STRING(name));
       
  1178 	PyErr_Format(PyExc_AttributeError,
       
  1179 		     "'%.50s' object has no attribute '%.400s'",
       
  1180 		     tp->tp_name, PyString_AS_STRING(name));
       
  1181 	return NULL;
       
  1182 }
       
  1183 
       
  1184 int
       
  1185 PyObject_HasAttr(PyObject *v, PyObject *name)
       
  1186 {
       
  1187 	PyObject *res = PyObject_GetAttr(v, name);
       
  1188 	if (res != NULL) {
       
  1189 		Py_DECREF(res);
       
  1190 		return 1;
       
  1191 	}
       
  1192 	PyErr_Clear();
       
  1193 	return 0;
       
  1194 }
       
  1195 
       
  1196 int
       
  1197 PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
       
  1198 {
       
  1199 	PyTypeObject *tp = Py_TYPE(v);
       
  1200 	int err;
       
  1201 
       
  1202 	if (!PyString_Check(name)){
       
  1203 #ifdef Py_USING_UNICODE
       
  1204 		/* The Unicode to string conversion is done here because the
       
  1205 		   existing tp_setattro slots expect a string object as name
       
  1206 		   and we wouldn't want to break those. */
       
  1207 		if (PyUnicode_Check(name)) {
       
  1208 			name = PyUnicode_AsEncodedString(name, NULL, NULL);
       
  1209 			if (name == NULL)
       
  1210 				return -1;
       
  1211 		}
       
  1212 		else
       
  1213 #endif
       
  1214 		{
       
  1215 			PyErr_Format(PyExc_TypeError,
       
  1216 				     "attribute name must be string, not '%.200s'",
       
  1217 				     Py_TYPE(name)->tp_name);
       
  1218 			return -1;
       
  1219 		}
       
  1220 	}
       
  1221 	else
       
  1222 		Py_INCREF(name);
       
  1223 
       
  1224 	PyString_InternInPlace(&name);
       
  1225 	if (tp->tp_setattro != NULL) {
       
  1226 		err = (*tp->tp_setattro)(v, name, value);
       
  1227 		Py_DECREF(name);
       
  1228 		return err;
       
  1229 	}
       
  1230 	if (tp->tp_setattr != NULL) {
       
  1231 		err = (*tp->tp_setattr)(v, PyString_AS_STRING(name), value);
       
  1232 		Py_DECREF(name);
       
  1233 		return err;
       
  1234 	}
       
  1235 	Py_DECREF(name);
       
  1236 	if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
       
  1237 		PyErr_Format(PyExc_TypeError,
       
  1238 			     "'%.100s' object has no attributes "
       
  1239 			     "(%s .%.100s)",
       
  1240 			     tp->tp_name,
       
  1241 			     value==NULL ? "del" : "assign to",
       
  1242 			     PyString_AS_STRING(name));
       
  1243 	else
       
  1244 		PyErr_Format(PyExc_TypeError,
       
  1245 			     "'%.100s' object has only read-only attributes "
       
  1246 			     "(%s .%.100s)",
       
  1247 			     tp->tp_name,
       
  1248 			     value==NULL ? "del" : "assign to",
       
  1249 			     PyString_AS_STRING(name));
       
  1250 	return -1;
       
  1251 }
       
  1252 
       
  1253 /* Helper to get a pointer to an object's __dict__ slot, if any */
       
  1254 
       
  1255 PyObject **
       
  1256 _PyObject_GetDictPtr(PyObject *obj)
       
  1257 {
       
  1258 	Py_ssize_t dictoffset;
       
  1259 	PyTypeObject *tp = Py_TYPE(obj);
       
  1260 
       
  1261 	if (!(tp->tp_flags & Py_TPFLAGS_HAVE_CLASS))
       
  1262 		return NULL;
       
  1263 	dictoffset = tp->tp_dictoffset;
       
  1264 	if (dictoffset == 0)
       
  1265 		return NULL;
       
  1266 	if (dictoffset < 0) {
       
  1267 		Py_ssize_t tsize;
       
  1268 		size_t size;
       
  1269 
       
  1270 		tsize = ((PyVarObject *)obj)->ob_size;
       
  1271 		if (tsize < 0)
       
  1272 			tsize = -tsize;
       
  1273 		size = _PyObject_VAR_SIZE(tp, tsize);
       
  1274 
       
  1275 		dictoffset += (long)size;
       
  1276 		assert(dictoffset > 0);
       
  1277 		assert(dictoffset % SIZEOF_VOID_P == 0);
       
  1278 	}
       
  1279 	return (PyObject **) ((char *)obj + dictoffset);
       
  1280 }
       
  1281 
       
  1282 PyObject *
       
  1283 PyObject_SelfIter(PyObject *obj)
       
  1284 {
       
  1285 	Py_INCREF(obj);
       
  1286 	return obj;
       
  1287 }
       
  1288 
       
  1289 /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
       
  1290 
       
  1291 PyObject *
       
  1292 PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
       
  1293 {
       
  1294 	PyTypeObject *tp = Py_TYPE(obj);
       
  1295 	PyObject *descr = NULL;
       
  1296 	PyObject *res = NULL;
       
  1297 	descrgetfunc f;
       
  1298 	Py_ssize_t dictoffset;
       
  1299 	PyObject **dictptr;
       
  1300 
       
  1301 	if (!PyString_Check(name)){
       
  1302 #ifdef Py_USING_UNICODE
       
  1303 		/* The Unicode to string conversion is done here because the
       
  1304 		   existing tp_setattro slots expect a string object as name
       
  1305 		   and we wouldn't want to break those. */
       
  1306 		if (PyUnicode_Check(name)) {
       
  1307 			name = PyUnicode_AsEncodedString(name, NULL, NULL);
       
  1308 			if (name == NULL)
       
  1309 				return NULL;
       
  1310 		}
       
  1311 		else
       
  1312 #endif
       
  1313 		{
       
  1314 			PyErr_Format(PyExc_TypeError,
       
  1315 				     "attribute name must be string, not '%.200s'",
       
  1316 				     Py_TYPE(name)->tp_name);
       
  1317 			return NULL;
       
  1318 		}
       
  1319 	}
       
  1320 	else
       
  1321 		Py_INCREF(name);
       
  1322 
       
  1323 	if (tp->tp_dict == NULL) {
       
  1324 		if (PyType_Ready(tp) < 0)
       
  1325 			goto done;
       
  1326 	}
       
  1327 
       
  1328 #if 0 /* XXX this is not quite _PyType_Lookup anymore */
       
  1329 	/* Inline _PyType_Lookup */
       
  1330 	{
       
  1331 		Py_ssize_t i, n;
       
  1332 		PyObject *mro, *base, *dict;
       
  1333 
       
  1334 		/* Look in tp_dict of types in MRO */
       
  1335 		mro = tp->tp_mro;
       
  1336 		assert(mro != NULL);
       
  1337 		assert(PyTuple_Check(mro));
       
  1338 		n = PyTuple_GET_SIZE(mro);
       
  1339 		for (i = 0; i < n; i++) {
       
  1340 			base = PyTuple_GET_ITEM(mro, i);
       
  1341 			if (PyClass_Check(base))
       
  1342 				dict = ((PyClassObject *)base)->cl_dict;
       
  1343 			else {
       
  1344 				assert(PyType_Check(base));
       
  1345 				dict = ((PyTypeObject *)base)->tp_dict;
       
  1346 			}
       
  1347 			assert(dict && PyDict_Check(dict));
       
  1348 			descr = PyDict_GetItem(dict, name);
       
  1349 			if (descr != NULL)
       
  1350 				break;
       
  1351 		}
       
  1352 	}
       
  1353 #else
       
  1354 	descr = _PyType_Lookup(tp, name);
       
  1355 #endif
       
  1356 
       
  1357 	Py_XINCREF(descr);
       
  1358 
       
  1359 	f = NULL;
       
  1360 	if (descr != NULL &&
       
  1361 	    PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
       
  1362 		f = descr->ob_type->tp_descr_get;
       
  1363 		if (f != NULL && PyDescr_IsData(descr)) {
       
  1364 			res = f(descr, obj, (PyObject *)obj->ob_type);
       
  1365 			Py_DECREF(descr);
       
  1366 			goto done;
       
  1367 		}
       
  1368 	}
       
  1369 
       
  1370 	/* Inline _PyObject_GetDictPtr */
       
  1371 	dictoffset = tp->tp_dictoffset;
       
  1372 	if (dictoffset != 0) {
       
  1373 		PyObject *dict;
       
  1374 		if (dictoffset < 0) {
       
  1375 			Py_ssize_t tsize;
       
  1376 			size_t size;
       
  1377 
       
  1378 			tsize = ((PyVarObject *)obj)->ob_size;
       
  1379 			if (tsize < 0)
       
  1380 				tsize = -tsize;
       
  1381 			size = _PyObject_VAR_SIZE(tp, tsize);
       
  1382 
       
  1383 			dictoffset += (long)size;
       
  1384 			assert(dictoffset > 0);
       
  1385 			assert(dictoffset % SIZEOF_VOID_P == 0);
       
  1386 		}
       
  1387 		dictptr = (PyObject **) ((char *)obj + dictoffset);
       
  1388 		dict = *dictptr;
       
  1389 		if (dict != NULL) {
       
  1390 			Py_INCREF(dict);
       
  1391 			res = PyDict_GetItem(dict, name);
       
  1392 			if (res != NULL) {
       
  1393 				Py_INCREF(res);
       
  1394 				Py_XDECREF(descr);
       
  1395                                 Py_DECREF(dict);
       
  1396 				goto done;
       
  1397 			}
       
  1398                         Py_DECREF(dict);
       
  1399 		}
       
  1400 	}
       
  1401 
       
  1402 	if (f != NULL) {
       
  1403 		res = f(descr, obj, (PyObject *)Py_TYPE(obj));
       
  1404 		Py_DECREF(descr);
       
  1405 		goto done;
       
  1406 	}
       
  1407 
       
  1408 	if (descr != NULL) {
       
  1409 		res = descr;
       
  1410 		/* descr was already increfed above */
       
  1411 		goto done;
       
  1412 	}
       
  1413 
       
  1414 	PyErr_Format(PyExc_AttributeError,
       
  1415 		     "'%.50s' object has no attribute '%.400s'",
       
  1416 		     tp->tp_name, PyString_AS_STRING(name));
       
  1417   done:
       
  1418 	Py_DECREF(name);
       
  1419 	return res;
       
  1420 }
       
  1421 
       
  1422 int
       
  1423 PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
       
  1424 {
       
  1425 	PyTypeObject *tp = Py_TYPE(obj);
       
  1426 	PyObject *descr;
       
  1427 	descrsetfunc f;
       
  1428 	PyObject **dictptr;
       
  1429 	int res = -1;
       
  1430 
       
  1431 	if (!PyString_Check(name)){
       
  1432 #ifdef Py_USING_UNICODE
       
  1433 		/* The Unicode to string conversion is done here because the
       
  1434 		   existing tp_setattro slots expect a string object as name
       
  1435 		   and we wouldn't want to break those. */
       
  1436 		if (PyUnicode_Check(name)) {
       
  1437 			name = PyUnicode_AsEncodedString(name, NULL, NULL);
       
  1438 			if (name == NULL)
       
  1439 				return -1;
       
  1440 		}
       
  1441 		else
       
  1442 #endif
       
  1443 		{
       
  1444 			PyErr_Format(PyExc_TypeError,
       
  1445 				     "attribute name must be string, not '%.200s'",
       
  1446 				     Py_TYPE(name)->tp_name);
       
  1447 			return -1;
       
  1448 		}
       
  1449 	}
       
  1450 	else
       
  1451 		Py_INCREF(name);
       
  1452 
       
  1453 	if (tp->tp_dict == NULL) {
       
  1454 		if (PyType_Ready(tp) < 0)
       
  1455 			goto done;
       
  1456 	}
       
  1457 
       
  1458 	descr = _PyType_Lookup(tp, name);
       
  1459 	f = NULL;
       
  1460 	if (descr != NULL &&
       
  1461 	    PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
       
  1462 		f = descr->ob_type->tp_descr_set;
       
  1463 		if (f != NULL && PyDescr_IsData(descr)) {
       
  1464 			res = f(descr, obj, value);
       
  1465 			goto done;
       
  1466 		}
       
  1467 	}
       
  1468 
       
  1469 	dictptr = _PyObject_GetDictPtr(obj);
       
  1470 	if (dictptr != NULL) {
       
  1471 		PyObject *dict = *dictptr;
       
  1472 		if (dict == NULL && value != NULL) {
       
  1473 			dict = PyDict_New();
       
  1474 			if (dict == NULL)
       
  1475 				goto done;
       
  1476 			*dictptr = dict;
       
  1477 		}
       
  1478 		if (dict != NULL) {
       
  1479 			Py_INCREF(dict);
       
  1480 			if (value == NULL)
       
  1481 				res = PyDict_DelItem(dict, name);
       
  1482 			else
       
  1483 				res = PyDict_SetItem(dict, name, value);
       
  1484 			if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
       
  1485 				PyErr_SetObject(PyExc_AttributeError, name);
       
  1486 			Py_DECREF(dict);
       
  1487 			goto done;
       
  1488 		}
       
  1489 	}
       
  1490 
       
  1491 	if (f != NULL) {
       
  1492 		res = f(descr, obj, value);
       
  1493 		goto done;
       
  1494 	}
       
  1495 
       
  1496 	if (descr == NULL) {
       
  1497 		PyErr_Format(PyExc_AttributeError,
       
  1498 			     "'%.100s' object has no attribute '%.200s'",
       
  1499 			     tp->tp_name, PyString_AS_STRING(name));
       
  1500 		goto done;
       
  1501 	}
       
  1502 
       
  1503 	PyErr_Format(PyExc_AttributeError,
       
  1504 		     "'%.50s' object attribute '%.400s' is read-only",
       
  1505 		     tp->tp_name, PyString_AS_STRING(name));
       
  1506   done:
       
  1507 	Py_DECREF(name);
       
  1508 	return res;
       
  1509 }
       
  1510 
       
  1511 /* Test a value used as condition, e.g., in a for or if statement.
       
  1512    Return -1 if an error occurred */
       
  1513 
       
  1514 int
       
  1515 PyObject_IsTrue(PyObject *v)
       
  1516 {
       
  1517 	Py_ssize_t res;
       
  1518 	if (v == Py_True)
       
  1519 		return 1;
       
  1520 	if (v == Py_False)
       
  1521 		return 0;
       
  1522 	if (v == Py_None)
       
  1523 		return 0;
       
  1524 	else if (v->ob_type->tp_as_number != NULL &&
       
  1525 		 v->ob_type->tp_as_number->nb_nonzero != NULL)
       
  1526 		res = (*v->ob_type->tp_as_number->nb_nonzero)(v);
       
  1527 	else if (v->ob_type->tp_as_mapping != NULL &&
       
  1528 		 v->ob_type->tp_as_mapping->mp_length != NULL)
       
  1529 		res = (*v->ob_type->tp_as_mapping->mp_length)(v);
       
  1530 	else if (v->ob_type->tp_as_sequence != NULL &&
       
  1531 		 v->ob_type->tp_as_sequence->sq_length != NULL)
       
  1532 		res = (*v->ob_type->tp_as_sequence->sq_length)(v);
       
  1533 	else
       
  1534 		return 1;
       
  1535 	/* if it is negative, it should be either -1 or -2 */
       
  1536 	return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
       
  1537 }
       
  1538 
       
  1539 /* equivalent of 'not v'
       
  1540    Return -1 if an error occurred */
       
  1541 
       
  1542 int
       
  1543 PyObject_Not(PyObject *v)
       
  1544 {
       
  1545 	int res;
       
  1546 	res = PyObject_IsTrue(v);
       
  1547 	if (res < 0)
       
  1548 		return res;
       
  1549 	return res == 0;
       
  1550 }
       
  1551 
       
  1552 /* Coerce two numeric types to the "larger" one.
       
  1553    Increment the reference count on each argument.
       
  1554    Return value:
       
  1555    -1 if an error occurred;
       
  1556    0 if the coercion succeeded (and then the reference counts are increased);
       
  1557    1 if no coercion is possible (and no error is raised).
       
  1558 */
       
  1559 int
       
  1560 PyNumber_CoerceEx(PyObject **pv, PyObject **pw)
       
  1561 {
       
  1562 	register PyObject *v = *pv;
       
  1563 	register PyObject *w = *pw;
       
  1564 	int res;
       
  1565 
       
  1566 	/* Shortcut only for old-style types */
       
  1567 	if (v->ob_type == w->ob_type &&
       
  1568 	    !PyType_HasFeature(v->ob_type, Py_TPFLAGS_CHECKTYPES))
       
  1569 	{
       
  1570 		Py_INCREF(v);
       
  1571 		Py_INCREF(w);
       
  1572 		return 0;
       
  1573 	}
       
  1574 	if (v->ob_type->tp_as_number && v->ob_type->tp_as_number->nb_coerce) {
       
  1575 		res = (*v->ob_type->tp_as_number->nb_coerce)(pv, pw);
       
  1576 		if (res <= 0)
       
  1577 			return res;
       
  1578 	}
       
  1579 	if (w->ob_type->tp_as_number && w->ob_type->tp_as_number->nb_coerce) {
       
  1580 		res = (*w->ob_type->tp_as_number->nb_coerce)(pw, pv);
       
  1581 		if (res <= 0)
       
  1582 			return res;
       
  1583 	}
       
  1584 	return 1;
       
  1585 }
       
  1586 
       
  1587 /* Coerce two numeric types to the "larger" one.
       
  1588    Increment the reference count on each argument.
       
  1589    Return -1 and raise an exception if no coercion is possible
       
  1590    (and then no reference count is incremented).
       
  1591 */
       
  1592 int
       
  1593 PyNumber_Coerce(PyObject **pv, PyObject **pw)
       
  1594 {
       
  1595 	int err = PyNumber_CoerceEx(pv, pw);
       
  1596 	if (err <= 0)
       
  1597 		return err;
       
  1598 	PyErr_SetString(PyExc_TypeError, "number coercion failed");
       
  1599 	return -1;
       
  1600 }
       
  1601 
       
  1602 
       
  1603 /* Test whether an object can be called */
       
  1604 
       
  1605 int
       
  1606 PyCallable_Check(PyObject *x)
       
  1607 {
       
  1608 	if (x == NULL)
       
  1609 		return 0;
       
  1610 	if (PyInstance_Check(x)) {
       
  1611 		PyObject *call = PyObject_GetAttrString(x, "__call__");
       
  1612 		if (call == NULL) {
       
  1613 			PyErr_Clear();
       
  1614 			return 0;
       
  1615 		}
       
  1616 		/* Could test recursively but don't, for fear of endless
       
  1617 		   recursion if some joker sets self.__call__ = self */
       
  1618 		Py_DECREF(call);
       
  1619 		return 1;
       
  1620 	}
       
  1621 	else {
       
  1622 		return x->ob_type->tp_call != NULL;
       
  1623 	}
       
  1624 }
       
  1625 
       
  1626 /* ------------------------- PyObject_Dir() helpers ------------------------- */
       
  1627 
       
  1628 /* Helper for PyObject_Dir.
       
  1629    Merge the __dict__ of aclass into dict, and recursively also all
       
  1630    the __dict__s of aclass's base classes.  The order of merging isn't
       
  1631    defined, as it's expected that only the final set of dict keys is
       
  1632    interesting.
       
  1633    Return 0 on success, -1 on error.
       
  1634 */
       
  1635 
       
  1636 static int
       
  1637 merge_class_dict(PyObject* dict, PyObject* aclass)
       
  1638 {
       
  1639 	PyObject *classdict;
       
  1640 	PyObject *bases;
       
  1641 
       
  1642 	assert(PyDict_Check(dict));
       
  1643 	assert(aclass);
       
  1644 
       
  1645 	/* Merge in the type's dict (if any). */
       
  1646 	classdict = PyObject_GetAttrString(aclass, "__dict__");
       
  1647 	if (classdict == NULL)
       
  1648 		PyErr_Clear();
       
  1649 	else {
       
  1650 		int status = PyDict_Update(dict, classdict);
       
  1651 		Py_DECREF(classdict);
       
  1652 		if (status < 0)
       
  1653 			return -1;
       
  1654 	}
       
  1655 
       
  1656 	/* Recursively merge in the base types' (if any) dicts. */
       
  1657 	bases = PyObject_GetAttrString(aclass, "__bases__");
       
  1658 	if (bases == NULL)
       
  1659 		PyErr_Clear();
       
  1660 	else {
       
  1661 		/* We have no guarantee that bases is a real tuple */
       
  1662 		Py_ssize_t i, n;
       
  1663 		n = PySequence_Size(bases); /* This better be right */
       
  1664 		if (n < 0)
       
  1665 			PyErr_Clear();
       
  1666 		else {
       
  1667 			for (i = 0; i < n; i++) {
       
  1668 				int status;
       
  1669 				PyObject *base = PySequence_GetItem(bases, i);
       
  1670 				if (base == NULL) {
       
  1671 					Py_DECREF(bases);
       
  1672 					return -1;
       
  1673 				}
       
  1674 				status = merge_class_dict(dict, base);
       
  1675 				Py_DECREF(base);
       
  1676 				if (status < 0) {
       
  1677 					Py_DECREF(bases);
       
  1678 					return -1;
       
  1679 				}
       
  1680 			}
       
  1681 		}
       
  1682 		Py_DECREF(bases);
       
  1683 	}
       
  1684 	return 0;
       
  1685 }
       
  1686 
       
  1687 /* Helper for PyObject_Dir.
       
  1688    If obj has an attr named attrname that's a list, merge its string
       
  1689    elements into keys of dict.
       
  1690    Return 0 on success, -1 on error.  Errors due to not finding the attr,
       
  1691    or the attr not being a list, are suppressed.
       
  1692 */
       
  1693 
       
  1694 static int
       
  1695 merge_list_attr(PyObject* dict, PyObject* obj, const char *attrname)
       
  1696 {
       
  1697 	PyObject *list;
       
  1698 	int result = 0;
       
  1699 
       
  1700 	assert(PyDict_Check(dict));
       
  1701 	assert(obj);
       
  1702 	assert(attrname);
       
  1703 
       
  1704 	list = PyObject_GetAttrString(obj, attrname);
       
  1705 	if (list == NULL)
       
  1706 		PyErr_Clear();
       
  1707 
       
  1708 	else if (PyList_Check(list)) {
       
  1709 		int i;
       
  1710 		for (i = 0; i < PyList_GET_SIZE(list); ++i) {
       
  1711 			PyObject *item = PyList_GET_ITEM(list, i);
       
  1712 			if (PyString_Check(item)) {
       
  1713 				result = PyDict_SetItem(dict, item, Py_None);
       
  1714 				if (result < 0)
       
  1715 					break;
       
  1716 			}
       
  1717 		}
       
  1718 		if (Py_Py3kWarningFlag &&
       
  1719 		    (strcmp(attrname, "__members__") == 0 ||
       
  1720 		     strcmp(attrname, "__methods__") == 0)) {
       
  1721 			if (PyErr_WarnEx(PyExc_DeprecationWarning, 
       
  1722 				       "__members__ and __methods__ not "
       
  1723 				       "supported in 3.x", 1) < 0) {
       
  1724 				Py_XDECREF(list);
       
  1725 				return -1;
       
  1726 			}
       
  1727 		}
       
  1728 	}
       
  1729 
       
  1730 	Py_XDECREF(list);
       
  1731 	return result;
       
  1732 }
       
  1733 
       
  1734 /* Helper for PyObject_Dir without arguments: returns the local scope. */
       
  1735 static PyObject *
       
  1736 _dir_locals(void)
       
  1737 {
       
  1738 	PyObject *names;
       
  1739 	PyObject *locals = PyEval_GetLocals();
       
  1740 
       
  1741 	if (locals == NULL) {
       
  1742 		PyErr_SetString(PyExc_SystemError, "frame does not exist");
       
  1743 		return NULL;
       
  1744 	}
       
  1745 
       
  1746 	names = PyMapping_Keys(locals);
       
  1747 	if (!names)
       
  1748 		return NULL;
       
  1749 	if (!PyList_Check(names)) {
       
  1750 		PyErr_Format(PyExc_TypeError,
       
  1751 			"dir(): expected keys() of locals to be a list, "
       
  1752 			"not '%.200s'", Py_TYPE(names)->tp_name);
       
  1753 		Py_DECREF(names);
       
  1754 		return NULL;
       
  1755 	}
       
  1756 	/* the locals don't need to be DECREF'd */
       
  1757 	return names;
       
  1758 }
       
  1759 
       
  1760 /* Helper for PyObject_Dir of type objects: returns __dict__ and __bases__.
       
  1761    We deliberately don't suck up its __class__, as methods belonging to the 
       
  1762    metaclass would probably be more confusing than helpful. 
       
  1763 */
       
  1764 static PyObject * 
       
  1765 _specialized_dir_type(PyObject *obj)
       
  1766 {
       
  1767 	PyObject *result = NULL;
       
  1768 	PyObject *dict = PyDict_New();
       
  1769 
       
  1770 	if (dict != NULL && merge_class_dict(dict, obj) == 0)
       
  1771 		result = PyDict_Keys(dict);
       
  1772 
       
  1773 	Py_XDECREF(dict);
       
  1774 	return result;
       
  1775 }
       
  1776 
       
  1777 /* Helper for PyObject_Dir of module objects: returns the module's __dict__. */
       
  1778 static PyObject *
       
  1779 _specialized_dir_module(PyObject *obj)
       
  1780 {
       
  1781 	PyObject *result = NULL;
       
  1782 	PyObject *dict = PyObject_GetAttrString(obj, "__dict__");
       
  1783 
       
  1784 	if (dict != NULL) {
       
  1785 		if (PyDict_Check(dict))
       
  1786 			result = PyDict_Keys(dict);
       
  1787 		else {
       
  1788 			PyErr_Format(PyExc_TypeError,
       
  1789 				     "%.200s.__dict__ is not a dictionary",
       
  1790 				     PyModule_GetName(obj));
       
  1791 		}
       
  1792 	}
       
  1793 
       
  1794 	Py_XDECREF(dict);
       
  1795 	return result;
       
  1796 }
       
  1797 
       
  1798 /* Helper for PyObject_Dir of generic objects: returns __dict__, __class__,
       
  1799    and recursively up the __class__.__bases__ chain.
       
  1800 */
       
  1801 static PyObject *
       
  1802 _generic_dir(PyObject *obj)
       
  1803 {
       
  1804 	PyObject *result = NULL;
       
  1805 	PyObject *dict = NULL;
       
  1806 	PyObject *itsclass = NULL;
       
  1807 	
       
  1808 	/* Get __dict__ (which may or may not be a real dict...) */
       
  1809 	dict = PyObject_GetAttrString(obj, "__dict__");
       
  1810 	if (dict == NULL) {
       
  1811 		PyErr_Clear();
       
  1812 		dict = PyDict_New();
       
  1813 	}
       
  1814 	else if (!PyDict_Check(dict)) {
       
  1815 		Py_DECREF(dict);
       
  1816 		dict = PyDict_New();
       
  1817 	}
       
  1818 	else {
       
  1819 		/* Copy __dict__ to avoid mutating it. */
       
  1820 		PyObject *temp = PyDict_Copy(dict);
       
  1821 		Py_DECREF(dict);
       
  1822 		dict = temp;
       
  1823 	}
       
  1824 
       
  1825 	if (dict == NULL)
       
  1826 		goto error;
       
  1827 
       
  1828 	/* Merge in __members__ and __methods__ (if any).
       
  1829 	 * This is removed in Python 3000. */
       
  1830 	if (merge_list_attr(dict, obj, "__members__") < 0)
       
  1831 		goto error;
       
  1832 	if (merge_list_attr(dict, obj, "__methods__") < 0)
       
  1833 		goto error;
       
  1834 
       
  1835 	/* Merge in attrs reachable from its class. */
       
  1836 	itsclass = PyObject_GetAttrString(obj, "__class__");
       
  1837 	if (itsclass == NULL)
       
  1838 		/* XXX(tomer): Perhaps fall back to obj->ob_type if no
       
  1839 		               __class__ exists? */
       
  1840 		PyErr_Clear();
       
  1841 	else {
       
  1842 		if (merge_class_dict(dict, itsclass) != 0)
       
  1843 			goto error;
       
  1844 	}
       
  1845 
       
  1846 	result = PyDict_Keys(dict);
       
  1847 	/* fall through */
       
  1848 error:
       
  1849 	Py_XDECREF(itsclass);
       
  1850 	Py_XDECREF(dict);
       
  1851 	return result;
       
  1852 }
       
  1853 
       
  1854 /* Helper for PyObject_Dir: object introspection.
       
  1855    This calls one of the above specialized versions if no __dir__ method
       
  1856    exists. */
       
  1857 static PyObject *
       
  1858 _dir_object(PyObject *obj)
       
  1859 {
       
  1860 	PyObject *result = NULL;
       
  1861 	PyObject *dirfunc = PyObject_GetAttrString((PyObject *)obj->ob_type,
       
  1862 						   "__dir__");
       
  1863 
       
  1864 	assert(obj);
       
  1865 	if (dirfunc == NULL) {
       
  1866 		/* use default implementation */
       
  1867 		PyErr_Clear();
       
  1868 		if (PyModule_Check(obj))
       
  1869 			result = _specialized_dir_module(obj);
       
  1870 		else if (PyType_Check(obj) || PyClass_Check(obj))
       
  1871 			result = _specialized_dir_type(obj);
       
  1872 		else
       
  1873 			result = _generic_dir(obj);
       
  1874 	}
       
  1875 	else {
       
  1876 		/* use __dir__ */
       
  1877 		result = PyObject_CallFunctionObjArgs(dirfunc, obj, NULL);
       
  1878 		Py_DECREF(dirfunc);
       
  1879 		if (result == NULL)
       
  1880 			return NULL;
       
  1881 
       
  1882 		/* result must be a list */
       
  1883 		/* XXX(gbrandl): could also check if all items are strings */
       
  1884 		if (!PyList_Check(result)) {
       
  1885 			PyErr_Format(PyExc_TypeError,
       
  1886 				     "__dir__() must return a list, not %.200s",
       
  1887 				     Py_TYPE(result)->tp_name);
       
  1888 			Py_DECREF(result);
       
  1889 			result = NULL;
       
  1890 		}
       
  1891 	}
       
  1892 
       
  1893 	return result;
       
  1894 }
       
  1895 
       
  1896 /* Implementation of dir() -- if obj is NULL, returns the names in the current
       
  1897    (local) scope.  Otherwise, performs introspection of the object: returns a
       
  1898    sorted list of attribute names (supposedly) accessible from the object
       
  1899 */
       
  1900 PyObject *
       
  1901 PyObject_Dir(PyObject *obj)
       
  1902 {
       
  1903 	PyObject * result;
       
  1904 
       
  1905 	if (obj == NULL)
       
  1906 		/* no object -- introspect the locals */
       
  1907 		result = _dir_locals();
       
  1908 	else
       
  1909 		/* object -- introspect the object */
       
  1910 		result = _dir_object(obj);
       
  1911 
       
  1912 	assert(result == NULL || PyList_Check(result));
       
  1913 
       
  1914 	if (result != NULL && PyList_Sort(result) != 0) {
       
  1915 		/* sorting the list failed */
       
  1916 		Py_DECREF(result);
       
  1917 		result = NULL;
       
  1918 	}
       
  1919 	
       
  1920 	return result;
       
  1921 }
       
  1922 
       
  1923 /*
       
  1924 NoObject is usable as a non-NULL undefined value, used by the macro None.
       
  1925 There is (and should be!) no way to create other objects of this type,
       
  1926 so there is exactly one (which is indestructible, by the way).
       
  1927 (XXX This type and the type of NotImplemented below should be unified.)
       
  1928 */
       
  1929 
       
  1930 /* ARGSUSED */
       
  1931 static PyObject *
       
  1932 none_repr(PyObject *op)
       
  1933 {
       
  1934 	return PyString_FromString("None");
       
  1935 }
       
  1936 
       
  1937 /* ARGUSED */
       
  1938 static void
       
  1939 none_dealloc(PyObject* ignore)
       
  1940 {
       
  1941 	/* This should never get called, but we also don't want to SEGV if
       
  1942 	 * we accidently decref None out of existance.
       
  1943 	 */
       
  1944 	Py_FatalError("deallocating None");
       
  1945 }
       
  1946 
       
  1947 
       
  1948 static PyTypeObject PyNone_Type = {
       
  1949 	PyVarObject_HEAD_INIT(&PyType_Type, 0)
       
  1950 	"NoneType",
       
  1951 	0,
       
  1952 	0,
       
  1953 	none_dealloc,	/*tp_dealloc*/ /*never called*/
       
  1954 	0,		/*tp_print*/
       
  1955 	0,		/*tp_getattr*/
       
  1956 	0,		/*tp_setattr*/
       
  1957 	0,		/*tp_compare*/
       
  1958 	none_repr,	/*tp_repr*/
       
  1959 	0,		/*tp_as_number*/
       
  1960 	0,		/*tp_as_sequence*/
       
  1961 	0,		/*tp_as_mapping*/
       
  1962 	(hashfunc)_Py_HashPointer, /*tp_hash */
       
  1963 };
       
  1964 
       
  1965 PyObject _Py_NoneStruct = {
       
  1966   _PyObject_EXTRA_INIT
       
  1967   1, &PyNone_Type
       
  1968 };
       
  1969 
       
  1970 /* NotImplemented is an object that can be used to signal that an
       
  1971    operation is not implemented for the given type combination. */
       
  1972 
       
  1973 static PyObject *
       
  1974 NotImplemented_repr(PyObject *op)
       
  1975 {
       
  1976 	return PyString_FromString("NotImplemented");
       
  1977 }
       
  1978 
       
  1979 static PyTypeObject PyNotImplemented_Type = {
       
  1980 	PyVarObject_HEAD_INIT(&PyType_Type, 0)
       
  1981 	"NotImplementedType",
       
  1982 	0,
       
  1983 	0,
       
  1984 	none_dealloc,	/*tp_dealloc*/ /*never called*/
       
  1985 	0,		/*tp_print*/
       
  1986 	0,		/*tp_getattr*/
       
  1987 	0,		/*tp_setattr*/
       
  1988 	0,		/*tp_compare*/
       
  1989 	NotImplemented_repr, /*tp_repr*/
       
  1990 	0,		/*tp_as_number*/
       
  1991 	0,		/*tp_as_sequence*/
       
  1992 	0,		/*tp_as_mapping*/
       
  1993 	0,		/*tp_hash */
       
  1994 };
       
  1995 
       
  1996 PyObject _Py_NotImplementedStruct = {
       
  1997 	_PyObject_EXTRA_INIT
       
  1998 	1, &PyNotImplemented_Type
       
  1999 };
       
  2000 
       
  2001 void
       
  2002 _Py_ReadyTypes(void)
       
  2003 {
       
  2004 	if (PyType_Ready(&PyType_Type) < 0)
       
  2005 		Py_FatalError("Can't initialize 'type'");
       
  2006 
       
  2007 	if (PyType_Ready(&_PyWeakref_RefType) < 0)
       
  2008 		Py_FatalError("Can't initialize 'weakref'");
       
  2009 
       
  2010 	if (PyType_Ready(&PyBool_Type) < 0)
       
  2011 		Py_FatalError("Can't initialize 'bool'");
       
  2012 
       
  2013 	if (PyType_Ready(&PyString_Type) < 0)
       
  2014 		Py_FatalError("Can't initialize 'str'");
       
  2015 
       
  2016 	if (PyType_Ready(&PyByteArray_Type) < 0)
       
  2017 		Py_FatalError("Can't initialize 'bytes'");
       
  2018 
       
  2019 	if (PyType_Ready(&PyList_Type) < 0)
       
  2020 		Py_FatalError("Can't initialize 'list'");
       
  2021 
       
  2022 	if (PyType_Ready(&PyNone_Type) < 0)
       
  2023 		Py_FatalError("Can't initialize type(None)");
       
  2024 
       
  2025 	if (PyType_Ready(&PyNotImplemented_Type) < 0)
       
  2026 		Py_FatalError("Can't initialize type(NotImplemented)");
       
  2027 }
       
  2028 
       
  2029 
       
  2030 #ifdef Py_TRACE_REFS
       
  2031 
       
  2032 void
       
  2033 _Py_NewReference(PyObject *op)
       
  2034 {
       
  2035 	_Py_INC_REFTOTAL;
       
  2036 	op->ob_refcnt = 1;
       
  2037 	_Py_AddToAllObjects(op, 1);
       
  2038 	_Py_INC_TPALLOCS(op);
       
  2039 }
       
  2040 
       
  2041 void
       
  2042 _Py_ForgetReference(register PyObject *op)
       
  2043 {
       
  2044 #ifdef SLOW_UNREF_CHECK
       
  2045         register PyObject *p;
       
  2046 #endif
       
  2047 	if (op->ob_refcnt < 0)
       
  2048 		Py_FatalError("UNREF negative refcnt");
       
  2049 	if (op == &refchain ||
       
  2050 	    op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
       
  2051 		Py_FatalError("UNREF invalid object");
       
  2052 #ifdef SLOW_UNREF_CHECK
       
  2053 	for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
       
  2054 		if (p == op)
       
  2055 			break;
       
  2056 	}
       
  2057 	if (p == &refchain) /* Not found */
       
  2058 		Py_FatalError("UNREF unknown object");
       
  2059 #endif
       
  2060 	op->_ob_next->_ob_prev = op->_ob_prev;
       
  2061 	op->_ob_prev->_ob_next = op->_ob_next;
       
  2062 	op->_ob_next = op->_ob_prev = NULL;
       
  2063 	_Py_INC_TPFREES(op);
       
  2064 }
       
  2065 
       
  2066 void
       
  2067 _Py_Dealloc(PyObject *op)
       
  2068 {
       
  2069 	destructor dealloc = Py_TYPE(op)->tp_dealloc;
       
  2070 	_Py_ForgetReference(op);
       
  2071 	(*dealloc)(op);
       
  2072 }
       
  2073 
       
  2074 /* Print all live objects.  Because PyObject_Print is called, the
       
  2075  * interpreter must be in a healthy state.
       
  2076  */
       
  2077 void
       
  2078 _Py_PrintReferences(FILE *fp)
       
  2079 {
       
  2080 	PyObject *op;
       
  2081 	fprintf(fp, "Remaining objects:\n");
       
  2082 	for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
       
  2083 		fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt);
       
  2084 		if (PyObject_Print(op, fp, 0) != 0)
       
  2085 			PyErr_Clear();
       
  2086 		putc('\n', fp);
       
  2087 	}
       
  2088 }
       
  2089 
       
  2090 /* Print the addresses of all live objects.  Unlike _Py_PrintReferences, this
       
  2091  * doesn't make any calls to the Python C API, so is always safe to call.
       
  2092  */
       
  2093 void
       
  2094 _Py_PrintReferenceAddresses(FILE *fp)
       
  2095 {
       
  2096 	PyObject *op;
       
  2097 	fprintf(fp, "Remaining object addresses:\n");
       
  2098 	for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
       
  2099 		fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op,
       
  2100 			op->ob_refcnt, Py_TYPE(op)->tp_name);
       
  2101 }
       
  2102 
       
  2103 PyObject *
       
  2104 _Py_GetObjects(PyObject *self, PyObject *args)
       
  2105 {
       
  2106 	int i, n;
       
  2107 	PyObject *t = NULL;
       
  2108 	PyObject *res, *op;
       
  2109 
       
  2110 	if (!PyArg_ParseTuple(args, "i|O", &n, &t))
       
  2111 		return NULL;
       
  2112 	op = refchain._ob_next;
       
  2113 	res = PyList_New(0);
       
  2114 	if (res == NULL)
       
  2115 		return NULL;
       
  2116 	for (i = 0; (n == 0 || i < n) && op != &refchain; i++) {
       
  2117 		while (op == self || op == args || op == res || op == t ||
       
  2118 		       (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) {
       
  2119 			op = op->_ob_next;
       
  2120 			if (op == &refchain)
       
  2121 				return res;
       
  2122 		}
       
  2123 		if (PyList_Append(res, op) < 0) {
       
  2124 			Py_DECREF(res);
       
  2125 			return NULL;
       
  2126 		}
       
  2127 		op = op->_ob_next;
       
  2128 	}
       
  2129 	return res;
       
  2130 }
       
  2131 
       
  2132 #endif
       
  2133 
       
  2134 
       
  2135 /* Hack to force loading of cobject.o */
       
  2136 PyTypeObject *_Py_cobject_hack = &PyCObject_Type;
       
  2137 
       
  2138 
       
  2139 /* Hack to force loading of abstract.o */
       
  2140 Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
       
  2141 
       
  2142 
       
  2143 /* Python's malloc wrappers (see pymem.h) */
       
  2144 
       
  2145 void *
       
  2146 PyMem_Malloc(size_t nbytes)
       
  2147 {
       
  2148 	return PyMem_MALLOC(nbytes);
       
  2149 }
       
  2150 
       
  2151 void *
       
  2152 PyMem_Realloc(void *p, size_t nbytes)
       
  2153 {
       
  2154 	return PyMem_REALLOC(p, nbytes);
       
  2155 }
       
  2156 
       
  2157 void
       
  2158 PyMem_Free(void *p)
       
  2159 {
       
  2160 	PyMem_FREE(p);
       
  2161 }
       
  2162 
       
  2163 
       
  2164 /* These methods are used to control infinite recursion in repr, str, print,
       
  2165    etc.  Container objects that may recursively contain themselves,
       
  2166    e.g. builtin dictionaries and lists, should used Py_ReprEnter() and
       
  2167    Py_ReprLeave() to avoid infinite recursion.
       
  2168 
       
  2169    Py_ReprEnter() returns 0 the first time it is called for a particular
       
  2170    object and 1 every time thereafter.  It returns -1 if an exception
       
  2171    occurred.  Py_ReprLeave() has no return value.
       
  2172 
       
  2173    See dictobject.c and listobject.c for examples of use.
       
  2174 */
       
  2175 
       
  2176 #define KEY "Py_Repr"
       
  2177 
       
  2178 int
       
  2179 Py_ReprEnter(PyObject *obj)
       
  2180 {
       
  2181 	PyObject *dict;
       
  2182 	PyObject *list;
       
  2183 	Py_ssize_t i;
       
  2184 
       
  2185 	dict = PyThreadState_GetDict();
       
  2186 	if (dict == NULL)
       
  2187 		return 0;
       
  2188 	list = PyDict_GetItemString(dict, KEY);
       
  2189 	if (list == NULL) {
       
  2190 		list = PyList_New(0);
       
  2191 		if (list == NULL)
       
  2192 			return -1;
       
  2193 		if (PyDict_SetItemString(dict, KEY, list) < 0)
       
  2194 			return -1;
       
  2195 		Py_DECREF(list);
       
  2196 	}
       
  2197 	i = PyList_GET_SIZE(list);
       
  2198 	while (--i >= 0) {
       
  2199 		if (PyList_GET_ITEM(list, i) == obj)
       
  2200 			return 1;
       
  2201 	}
       
  2202 	PyList_Append(list, obj);
       
  2203 	return 0;
       
  2204 }
       
  2205 
       
  2206 void
       
  2207 Py_ReprLeave(PyObject *obj)
       
  2208 {
       
  2209 	PyObject *dict;
       
  2210 	PyObject *list;
       
  2211 	Py_ssize_t i;
       
  2212 
       
  2213 	dict = PyThreadState_GetDict();
       
  2214 	if (dict == NULL)
       
  2215 		return;
       
  2216 	list = PyDict_GetItemString(dict, KEY);
       
  2217 	if (list == NULL || !PyList_Check(list))
       
  2218 		return;
       
  2219 	i = PyList_GET_SIZE(list);
       
  2220 	/* Count backwards because we always expect obj to be list[-1] */
       
  2221 	while (--i >= 0) {
       
  2222 		if (PyList_GET_ITEM(list, i) == obj) {
       
  2223 			PyList_SetSlice(list, i, i + 1, NULL);
       
  2224 			break;
       
  2225 		}
       
  2226 	}
       
  2227 }
       
  2228 
       
  2229 /* Trashcan support. */
       
  2230 
       
  2231 /* Current call-stack depth of tp_dealloc calls. */
       
  2232 int _PyTrash_delete_nesting = 0;
       
  2233 
       
  2234 /* List of objects that still need to be cleaned up, singly linked via their
       
  2235  * gc headers' gc_prev pointers.
       
  2236  */
       
  2237 PyObject *_PyTrash_delete_later = NULL;
       
  2238 
       
  2239 /* Add op to the _PyTrash_delete_later list.  Called when the current
       
  2240  * call-stack depth gets large.  op must be a currently untracked gc'ed
       
  2241  * object, with refcount 0.  Py_DECREF must already have been called on it.
       
  2242  */
       
  2243 void
       
  2244 _PyTrash_deposit_object(PyObject *op)
       
  2245 {
       
  2246 	assert(PyObject_IS_GC(op));
       
  2247 	assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED);
       
  2248 	assert(op->ob_refcnt == 0);
       
  2249 	_Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later;
       
  2250 	_PyTrash_delete_later = op;
       
  2251 }
       
  2252 
       
  2253 /* Dealloccate all the objects in the _PyTrash_delete_later list.  Called when
       
  2254  * the call-stack unwinds again.
       
  2255  */
       
  2256 void
       
  2257 _PyTrash_destroy_chain(void)
       
  2258 {
       
  2259 	while (_PyTrash_delete_later) {
       
  2260 		PyObject *op = _PyTrash_delete_later;
       
  2261 		destructor dealloc = Py_TYPE(op)->tp_dealloc;
       
  2262 
       
  2263 		_PyTrash_delete_later =
       
  2264 			(PyObject*) _Py_AS_GC(op)->gc.gc_prev;
       
  2265 
       
  2266 		/* Call the deallocator directly.  This used to try to
       
  2267 		 * fool Py_DECREF into calling it indirectly, but
       
  2268 		 * Py_DECREF was already called on this object, and in
       
  2269 		 * assorted non-release builds calling Py_DECREF again ends
       
  2270 		 * up distorting allocation statistics.
       
  2271 		 */
       
  2272 		assert(op->ob_refcnt == 0);
       
  2273 		++_PyTrash_delete_nesting;
       
  2274 		(*dealloc)(op);
       
  2275 		--_PyTrash_delete_nesting;
       
  2276 	}
       
  2277 }
       
  2278 
       
  2279 #ifdef __cplusplus
       
  2280 }
       
  2281 #endif