Mercurial > lcfOS
comparison cos/python/Objects/object.c @ 27:7f74363f4c82
Added some files for the python port
author | windel |
---|---|
date | Tue, 27 Dec 2011 18:59:02 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
26:dcce92b1efbc | 27:7f74363f4c82 |
---|---|
1 | |
2 /* Generic object operations; and implementation of None */ | |
3 | |
4 #include "Python.h" | |
5 #include "frameobject.h" | |
6 | |
7 /* Object allocation routines used by NEWOBJ and NEWVAROBJ macros. | |
8 These are used by the individual routines for object creation. | |
9 Do not call them otherwise, they do not initialize the object! */ | |
10 | |
11 void | |
12 Py_IncRef(PyObject *o) | |
13 { | |
14 Py_XINCREF(o); | |
15 } | |
16 | |
17 void | |
18 Py_DecRef(PyObject *o) | |
19 { | |
20 Py_XDECREF(o); | |
21 } | |
22 | |
23 PyObject * | |
24 PyObject_Init(PyObject *op, PyTypeObject *tp) | |
25 { | |
26 if (op == NULL) | |
27 return PyErr_NoMemory(); | |
28 /* Any changes should be reflected in PyObject_INIT (objimpl.h) */ | |
29 Py_TYPE(op) = tp; | |
30 _Py_NewReference(op); | |
31 return op; | |
32 } | |
33 | |
34 PyVarObject * | |
35 PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size) | |
36 { | |
37 if (op == NULL) | |
38 return (PyVarObject *) PyErr_NoMemory(); | |
39 /* Any changes should be reflected in PyObject_INIT_VAR */ | |
40 op->ob_size = size; | |
41 Py_TYPE(op) = tp; | |
42 _Py_NewReference((PyObject *)op); | |
43 return op; | |
44 } | |
45 | |
46 PyObject * | |
47 _PyObject_New(PyTypeObject *tp) | |
48 { | |
49 PyObject *op; | |
50 op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp)); | |
51 if (op == NULL) | |
52 return PyErr_NoMemory(); | |
53 return PyObject_INIT(op, tp); | |
54 } | |
55 | |
56 PyVarObject * | |
57 _PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems) | |
58 { | |
59 PyVarObject *op; | |
60 const size_t size = _PyObject_VAR_SIZE(tp, nitems); | |
61 op = (PyVarObject *) PyObject_MALLOC(size); | |
62 if (op == NULL) | |
63 return (PyVarObject *)PyErr_NoMemory(); | |
64 return PyObject_INIT_VAR(op, tp, nitems); | |
65 } | |
66 | |
67 int | |
68 PyObject_Print(PyObject *op, FILE *fp, int flags) | |
69 { | |
70 int ret = 0; | |
71 if (PyErr_CheckSignals()) | |
72 return -1; | |
73 #ifdef USE_STACKCHECK | |
74 if (PyOS_CheckStack()) { | |
75 PyErr_SetString(PyExc_MemoryError, "stack overflow"); | |
76 return -1; | |
77 } | |
78 #endif | |
79 clearerr(fp); /* Clear any previous error condition */ | |
80 if (op == NULL) { | |
81 Py_BEGIN_ALLOW_THREADS | |
82 fprintf(fp, "<nil>"); | |
83 Py_END_ALLOW_THREADS | |
84 } | |
85 else { | |
86 if (op->ob_refcnt <= 0) | |
87 /* XXX(twouters) cast refcount to long until %zd is | |
88 universally available */ | |
89 Py_BEGIN_ALLOW_THREADS | |
90 fprintf(fp, "<refcnt %ld at %p>", | |
91 (long)op->ob_refcnt, op); | |
92 Py_END_ALLOW_THREADS | |
93 else { | |
94 PyObject *s; | |
95 if (flags & Py_PRINT_RAW) | |
96 s = PyObject_Str(op); | |
97 else | |
98 s = PyObject_Repr(op); | |
99 if (s == NULL) | |
100 ret = -1; | |
101 else if (PyBytes_Check(s)) { | |
102 fwrite(PyBytes_AS_STRING(s), 1, | |
103 PyBytes_GET_SIZE(s), fp); | |
104 } | |
105 else if (PyUnicode_Check(s)) { | |
106 PyObject *t; | |
107 t = PyUnicode_AsEncodedString(s, "utf-8", "backslashreplace"); | |
108 if (t == NULL) | |
109 ret = 0; | |
110 else { | |
111 fwrite(PyBytes_AS_STRING(t), 1, | |
112 PyBytes_GET_SIZE(t), fp); | |
113 Py_DECREF(t); | |
114 } | |
115 } | |
116 else { | |
117 PyErr_Format(PyExc_TypeError, | |
118 "str() or repr() returned '%.100s'", | |
119 s->ob_type->tp_name); | |
120 ret = -1; | |
121 } | |
122 Py_XDECREF(s); | |
123 } | |
124 } | |
125 if (ret == 0) { | |
126 if (ferror(fp)) { | |
127 PyErr_SetFromErrno(PyExc_IOError); | |
128 clearerr(fp); | |
129 ret = -1; | |
130 } | |
131 } | |
132 return ret; | |
133 } | |
134 | |
135 /* For debugging convenience. Set a breakpoint here and call it from your DLL */ | |
136 void | |
137 _Py_BreakPoint(void) | |
138 { | |
139 } | |
140 | |
141 | |
142 /* For debugging convenience. See Misc/gdbinit for some useful gdb hooks */ | |
143 void | |
144 _PyObject_Dump(PyObject* op) | |
145 { | |
146 if (op == NULL) | |
147 fprintf(stderr, "NULL\n"); | |
148 else { | |
149 #ifdef WITH_THREAD | |
150 PyGILState_STATE gil; | |
151 #endif | |
152 fprintf(stderr, "object : "); | |
153 #ifdef WITH_THREAD | |
154 gil = PyGILState_Ensure(); | |
155 #endif | |
156 (void)PyObject_Print(op, stderr, 0); | |
157 #ifdef WITH_THREAD | |
158 PyGILState_Release(gil); | |
159 #endif | |
160 /* XXX(twouters) cast refcount to long until %zd is | |
161 universally available */ | |
162 fprintf(stderr, "\n" | |
163 "type : %s\n" | |
164 "refcount: %ld\n" | |
165 "address : %p\n", | |
166 Py_TYPE(op)==NULL ? "NULL" : Py_TYPE(op)->tp_name, | |
167 (long)op->ob_refcnt, | |
168 op); | |
169 } | |
170 } | |
171 | |
172 PyObject * | |
173 PyObject_Repr(PyObject *v) | |
174 { | |
175 PyObject *res; | |
176 if (PyErr_CheckSignals()) | |
177 return NULL; | |
178 #ifdef USE_STACKCHECK | |
179 if (PyOS_CheckStack()) { | |
180 PyErr_SetString(PyExc_MemoryError, "stack overflow"); | |
181 return NULL; | |
182 } | |
183 #endif | |
184 if (v == NULL) | |
185 return PyUnicode_FromString("<NULL>"); | |
186 if (Py_TYPE(v)->tp_repr == NULL) | |
187 return PyUnicode_FromFormat("<%s object at %p>", | |
188 v->ob_type->tp_name, v); | |
189 res = (*v->ob_type->tp_repr)(v); | |
190 if (res == NULL) | |
191 return NULL; | |
192 if (!PyUnicode_Check(res)) { | |
193 PyErr_Format(PyExc_TypeError, | |
194 "__repr__ returned non-string (type %.200s)", | |
195 res->ob_type->tp_name); | |
196 Py_DECREF(res); | |
197 return NULL; | |
198 } | |
199 #ifndef Py_DEBUG | |
200 if (PyUnicode_READY(res) < 0) | |
201 return NULL; | |
202 #endif | |
203 return res; | |
204 } | |
205 | |
206 PyObject * | |
207 PyObject_Str(PyObject *v) | |
208 { | |
209 PyObject *res; | |
210 if (PyErr_CheckSignals()) | |
211 return NULL; | |
212 #ifdef USE_STACKCHECK | |
213 if (PyOS_CheckStack()) { | |
214 PyErr_SetString(PyExc_MemoryError, "stack overflow"); | |
215 return NULL; | |
216 } | |
217 #endif | |
218 if (v == NULL) | |
219 return PyUnicode_FromString("<NULL>"); | |
220 if (PyUnicode_CheckExact(v)) { | |
221 #ifndef Py_DEBUG | |
222 if (PyUnicode_READY(v) < 0) | |
223 return NULL; | |
224 #endif | |
225 Py_INCREF(v); | |
226 return v; | |
227 } | |
228 if (Py_TYPE(v)->tp_str == NULL) | |
229 return PyObject_Repr(v); | |
230 | |
231 /* It is possible for a type to have a tp_str representation that loops | |
232 infinitely. */ | |
233 if (Py_EnterRecursiveCall(" while getting the str of an object")) | |
234 return NULL; | |
235 res = (*Py_TYPE(v)->tp_str)(v); | |
236 Py_LeaveRecursiveCall(); | |
237 if (res == NULL) | |
238 return NULL; | |
239 if (!PyUnicode_Check(res)) { | |
240 PyErr_Format(PyExc_TypeError, | |
241 "__str__ returned non-string (type %.200s)", | |
242 Py_TYPE(res)->tp_name); | |
243 Py_DECREF(res); | |
244 return NULL; | |
245 } | |
246 #ifndef Py_DEBUG | |
247 if (PyUnicode_READY(res) < 0) | |
248 return NULL; | |
249 #endif | |
250 assert(_PyUnicode_CheckConsistency(res, 1)); | |
251 return res; | |
252 } | |
253 | |
254 PyObject * | |
255 PyObject_ASCII(PyObject *v) | |
256 { | |
257 PyObject *repr, *ascii, *res; | |
258 | |
259 repr = PyObject_Repr(v); | |
260 if (repr == NULL) | |
261 return NULL; | |
262 | |
263 /* repr is guaranteed to be a PyUnicode object by PyObject_Repr */ | |
264 ascii = _PyUnicode_AsASCIIString(repr, "backslashreplace"); | |
265 Py_DECREF(repr); | |
266 if (ascii == NULL) | |
267 return NULL; | |
268 | |
269 res = PyUnicode_DecodeASCII( | |
270 PyBytes_AS_STRING(ascii), | |
271 PyBytes_GET_SIZE(ascii), | |
272 NULL); | |
273 | |
274 Py_DECREF(ascii); | |
275 return res; | |
276 } | |
277 | |
278 PyObject * | |
279 PyObject_Bytes(PyObject *v) | |
280 { | |
281 PyObject *result, *func; | |
282 static PyObject *bytesstring = NULL; | |
283 | |
284 if (v == NULL) | |
285 return PyBytes_FromString("<NULL>"); | |
286 | |
287 if (PyBytes_CheckExact(v)) { | |
288 Py_INCREF(v); | |
289 return v; | |
290 } | |
291 | |
292 func = _PyObject_LookupSpecial(v, "__bytes__", &bytesstring); | |
293 if (func != NULL) { | |
294 result = PyObject_CallFunctionObjArgs(func, NULL); | |
295 Py_DECREF(func); | |
296 if (result == NULL) | |
297 return NULL; | |
298 if (!PyBytes_Check(result)) { | |
299 PyErr_Format(PyExc_TypeError, | |
300 "__bytes__ returned non-bytes (type %.200s)", | |
301 Py_TYPE(result)->tp_name); | |
302 Py_DECREF(result); | |
303 return NULL; | |
304 } | |
305 return result; | |
306 } | |
307 else if (PyErr_Occurred()) | |
308 return NULL; | |
309 return PyBytes_FromObject(v); | |
310 } | |
311 | |
312 /* For Python 3.0.1 and later, the old three-way comparison has been | |
313 completely removed in favour of rich comparisons. PyObject_Compare() and | |
314 PyObject_Cmp() are gone, and the builtin cmp function no longer exists. | |
315 The old tp_compare slot has been renamed to tp_reserved, and should no | |
316 longer be used. Use tp_richcompare instead. | |
317 | |
318 See (*) below for practical amendments. | |
319 | |
320 tp_richcompare gets called with a first argument of the appropriate type | |
321 and a second object of an arbitrary type. We never do any kind of | |
322 coercion. | |
323 | |
324 The tp_richcompare slot should return an object, as follows: | |
325 | |
326 NULL if an exception occurred | |
327 NotImplemented if the requested comparison is not implemented | |
328 any other false value if the requested comparison is false | |
329 any other true value if the requested comparison is true | |
330 | |
331 The PyObject_RichCompare[Bool]() wrappers raise TypeError when they get | |
332 NotImplemented. | |
333 | |
334 (*) Practical amendments: | |
335 | |
336 - If rich comparison returns NotImplemented, == and != are decided by | |
337 comparing the object pointer (i.e. falling back to the base object | |
338 implementation). | |
339 | |
340 */ | |
341 | |
342 /* Map rich comparison operators to their swapped version, e.g. LT <--> GT */ | |
343 int _Py_SwappedOp[] = {Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE}; | |
344 | |
345 static char *opstrings[] = {"<", "<=", "==", "!=", ">", ">="}; | |
346 | |
347 /* Perform a rich comparison, raising TypeError when the requested comparison | |
348 operator is not supported. */ | |
349 static PyObject * | |
350 do_richcompare(PyObject *v, PyObject *w, int op) | |
351 { | |
352 richcmpfunc f; | |
353 PyObject *res; | |
354 int checked_reverse_op = 0; | |
355 | |
356 if (v->ob_type != w->ob_type && | |
357 PyType_IsSubtype(w->ob_type, v->ob_type) && | |
358 (f = w->ob_type->tp_richcompare) != NULL) { | |
359 checked_reverse_op = 1; | |
360 res = (*f)(w, v, _Py_SwappedOp[op]); | |
361 if (res != Py_NotImplemented) | |
362 return res; | |
363 Py_DECREF(res); | |
364 } | |
365 if ((f = v->ob_type->tp_richcompare) != NULL) { | |
366 res = (*f)(v, w, op); | |
367 if (res != Py_NotImplemented) | |
368 return res; | |
369 Py_DECREF(res); | |
370 } | |
371 if (!checked_reverse_op && (f = w->ob_type->tp_richcompare) != NULL) { | |
372 res = (*f)(w, v, _Py_SwappedOp[op]); | |
373 if (res != Py_NotImplemented) | |
374 return res; | |
375 Py_DECREF(res); | |
376 } | |
377 /* If neither object implements it, provide a sensible default | |
378 for == and !=, but raise an exception for ordering. */ | |
379 switch (op) { | |
380 case Py_EQ: | |
381 res = (v == w) ? Py_True : Py_False; | |
382 break; | |
383 case Py_NE: | |
384 res = (v != w) ? Py_True : Py_False; | |
385 break; | |
386 default: | |
387 /* XXX Special-case None so it doesn't show as NoneType() */ | |
388 PyErr_Format(PyExc_TypeError, | |
389 "unorderable types: %.100s() %s %.100s()", | |
390 v->ob_type->tp_name, | |
391 opstrings[op], | |
392 w->ob_type->tp_name); | |
393 return NULL; | |
394 } | |
395 Py_INCREF(res); | |
396 return res; | |
397 } | |
398 | |
399 /* Perform a rich comparison with object result. This wraps do_richcompare() | |
400 with a check for NULL arguments and a recursion check. */ | |
401 | |
402 PyObject * | |
403 PyObject_RichCompare(PyObject *v, PyObject *w, int op) | |
404 { | |
405 PyObject *res; | |
406 | |
407 assert(Py_LT <= op && op <= Py_GE); | |
408 if (v == NULL || w == NULL) { | |
409 if (!PyErr_Occurred()) | |
410 PyErr_BadInternalCall(); | |
411 return NULL; | |
412 } | |
413 if (Py_EnterRecursiveCall(" in comparison")) | |
414 return NULL; | |
415 res = do_richcompare(v, w, op); | |
416 Py_LeaveRecursiveCall(); | |
417 return res; | |
418 } | |
419 | |
420 /* Perform a rich comparison with integer result. This wraps | |
421 PyObject_RichCompare(), returning -1 for error, 0 for false, 1 for true. */ | |
422 int | |
423 PyObject_RichCompareBool(PyObject *v, PyObject *w, int op) | |
424 { | |
425 PyObject *res; | |
426 int ok; | |
427 | |
428 /* Quick result when objects are the same. | |
429 Guarantees that identity implies equality. */ | |
430 if (v == w) { | |
431 if (op == Py_EQ) | |
432 return 1; | |
433 else if (op == Py_NE) | |
434 return 0; | |
435 } | |
436 | |
437 res = PyObject_RichCompare(v, w, op); | |
438 if (res == NULL) | |
439 return -1; | |
440 if (PyBool_Check(res)) | |
441 ok = (res == Py_True); | |
442 else | |
443 ok = PyObject_IsTrue(res); | |
444 Py_DECREF(res); | |
445 return ok; | |
446 } | |
447 | |
448 /* Set of hash utility functions to help maintaining the invariant that | |
449 if a==b then hash(a)==hash(b) | |
450 | |
451 All the utility functions (_Py_Hash*()) return "-1" to signify an error. | |
452 */ | |
453 | |
454 /* For numeric types, the hash of a number x is based on the reduction | |
455 of x modulo the prime P = 2**_PyHASH_BITS - 1. It's designed so that | |
456 hash(x) == hash(y) whenever x and y are numerically equal, even if | |
457 x and y have different types. | |
458 | |
459 A quick summary of the hashing strategy: | |
460 | |
461 (1) First define the 'reduction of x modulo P' for any rational | |
462 number x; this is a standard extension of the usual notion of | |
463 reduction modulo P for integers. If x == p/q (written in lowest | |
464 terms), the reduction is interpreted as the reduction of p times | |
465 the inverse of the reduction of q, all modulo P; if q is exactly | |
466 divisible by P then define the reduction to be infinity. So we've | |
467 got a well-defined map | |
468 | |
469 reduce : { rational numbers } -> { 0, 1, 2, ..., P-1, infinity }. | |
470 | |
471 (2) Now for a rational number x, define hash(x) by: | |
472 | |
473 reduce(x) if x >= 0 | |
474 -reduce(-x) if x < 0 | |
475 | |
476 If the result of the reduction is infinity (this is impossible for | |
477 integers, floats and Decimals) then use the predefined hash value | |
478 _PyHASH_INF for x >= 0, or -_PyHASH_INF for x < 0, instead. | |
479 _PyHASH_INF, -_PyHASH_INF and _PyHASH_NAN are also used for the | |
480 hashes of float and Decimal infinities and nans. | |
481 | |
482 A selling point for the above strategy is that it makes it possible | |
483 to compute hashes of decimal and binary floating-point numbers | |
484 efficiently, even if the exponent of the binary or decimal number | |
485 is large. The key point is that | |
486 | |
487 reduce(x * y) == reduce(x) * reduce(y) (modulo _PyHASH_MODULUS) | |
488 | |
489 provided that {reduce(x), reduce(y)} != {0, infinity}. The reduction of a | |
490 binary or decimal float is never infinity, since the denominator is a power | |
491 of 2 (for binary) or a divisor of a power of 10 (for decimal). So we have, | |
492 for nonnegative x, | |
493 | |
494 reduce(x * 2**e) == reduce(x) * reduce(2**e) % _PyHASH_MODULUS | |
495 | |
496 reduce(x * 10**e) == reduce(x) * reduce(10**e) % _PyHASH_MODULUS | |
497 | |
498 and reduce(10**e) can be computed efficiently by the usual modular | |
499 exponentiation algorithm. For reduce(2**e) it's even better: since | |
500 P is of the form 2**n-1, reduce(2**e) is 2**(e mod n), and multiplication | |
501 by 2**(e mod n) modulo 2**n-1 just amounts to a rotation of bits. | |
502 | |
503 */ | |
504 | |
505 Py_hash_t | |
506 _Py_HashDouble(double v) | |
507 { | |
508 int e, sign; | |
509 double m; | |
510 Py_uhash_t x, y; | |
511 | |
512 if (!Py_IS_FINITE(v)) { | |
513 if (Py_IS_INFINITY(v)) | |
514 return v > 0 ? _PyHASH_INF : -_PyHASH_INF; | |
515 else | |
516 return _PyHASH_NAN; | |
517 } | |
518 | |
519 m = frexp(v, &e); | |
520 | |
521 sign = 1; | |
522 if (m < 0) { | |
523 sign = -1; | |
524 m = -m; | |
525 } | |
526 | |
527 /* process 28 bits at a time; this should work well both for binary | |
528 and hexadecimal floating point. */ | |
529 x = 0; | |
530 while (m) { | |
531 x = ((x << 28) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - 28); | |
532 m *= 268435456.0; /* 2**28 */ | |
533 e -= 28; | |
534 y = (Py_uhash_t)m; /* pull out integer part */ | |
535 m -= y; | |
536 x += y; | |
537 if (x >= _PyHASH_MODULUS) | |
538 x -= _PyHASH_MODULUS; | |
539 } | |
540 | |
541 /* adjust for the exponent; first reduce it modulo _PyHASH_BITS */ | |
542 e = e >= 0 ? e % _PyHASH_BITS : _PyHASH_BITS-1-((-1-e) % _PyHASH_BITS); | |
543 x = ((x << e) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - e); | |
544 | |
545 x = x * sign; | |
546 if (x == (Py_uhash_t)-1) | |
547 x = (Py_uhash_t)-2; | |
548 return (Py_hash_t)x; | |
549 } | |
550 | |
551 Py_hash_t | |
552 _Py_HashPointer(void *p) | |
553 { | |
554 Py_hash_t x; | |
555 size_t y = (size_t)p; | |
556 /* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid | |
557 excessive hash collisions for dicts and sets */ | |
558 y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4)); | |
559 x = (Py_hash_t)y; | |
560 if (x == -1) | |
561 x = -2; | |
562 return x; | |
563 } | |
564 | |
565 Py_hash_t | |
566 _Py_HashBytes(unsigned char *p, Py_ssize_t len) | |
567 { | |
568 Py_uhash_t x; | |
569 Py_ssize_t i; | |
570 | |
571 x = (Py_uhash_t) *p << 7; | |
572 for (i = 0; i < len; i++) | |
573 x = (1000003U * x) ^ (Py_uhash_t) *p++; | |
574 x ^= (Py_uhash_t) len; | |
575 if (x == -1) | |
576 x = -2; | |
577 return x; | |
578 } | |
579 | |
580 Py_hash_t | |
581 PyObject_HashNotImplemented(PyObject *v) | |
582 { | |
583 PyErr_Format(PyExc_TypeError, "unhashable type: '%.200s'", | |
584 Py_TYPE(v)->tp_name); | |
585 return -1; | |
586 } | |
587 | |
588 Py_hash_t | |
589 PyObject_Hash(PyObject *v) | |
590 { | |
591 PyTypeObject *tp = Py_TYPE(v); | |
592 if (tp->tp_hash != NULL) | |
593 return (*tp->tp_hash)(v); | |
594 /* To keep to the general practice that inheriting | |
595 * solely from object in C code should work without | |
596 * an explicit call to PyType_Ready, we implicitly call | |
597 * PyType_Ready here and then check the tp_hash slot again | |
598 */ | |
599 if (tp->tp_dict == NULL) { | |
600 if (PyType_Ready(tp) < 0) | |
601 return -1; | |
602 if (tp->tp_hash != NULL) | |
603 return (*tp->tp_hash)(v); | |
604 } | |
605 /* Otherwise, the object can't be hashed */ | |
606 return PyObject_HashNotImplemented(v); | |
607 } | |
608 | |
609 PyObject * | |
610 PyObject_GetAttrString(PyObject *v, const char *name) | |
611 { | |
612 PyObject *w, *res; | |
613 | |
614 if (Py_TYPE(v)->tp_getattr != NULL) | |
615 return (*Py_TYPE(v)->tp_getattr)(v, (char*)name); | |
616 w = PyUnicode_InternFromString(name); | |
617 if (w == NULL) | |
618 return NULL; | |
619 res = PyObject_GetAttr(v, w); | |
620 Py_XDECREF(w); | |
621 return res; | |
622 } | |
623 | |
624 int | |
625 PyObject_HasAttrString(PyObject *v, const char *name) | |
626 { | |
627 PyObject *res = PyObject_GetAttrString(v, name); | |
628 if (res != NULL) { | |
629 Py_DECREF(res); | |
630 return 1; | |
631 } | |
632 PyErr_Clear(); | |
633 return 0; | |
634 } | |
635 | |
636 int | |
637 PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w) | |
638 { | |
639 PyObject *s; | |
640 int res; | |
641 | |
642 if (Py_TYPE(v)->tp_setattr != NULL) | |
643 return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w); | |
644 s = PyUnicode_InternFromString(name); | |
645 if (s == NULL) | |
646 return -1; | |
647 res = PyObject_SetAttr(v, s, w); | |
648 Py_XDECREF(s); | |
649 return res; | |
650 } | |
651 | |
652 int | |
653 _PyObject_IsAbstract(PyObject *obj) | |
654 { | |
655 int res; | |
656 PyObject* isabstract; | |
657 _Py_IDENTIFIER(__isabstractmethod__); | |
658 | |
659 if (obj == NULL) | |
660 return 0; | |
661 | |
662 isabstract = _PyObject_GetAttrId(obj, &PyId___isabstractmethod__); | |
663 if (isabstract == NULL) { | |
664 if (PyErr_ExceptionMatches(PyExc_AttributeError)) { | |
665 PyErr_Clear(); | |
666 return 0; | |
667 } | |
668 return -1; | |
669 } | |
670 res = PyObject_IsTrue(isabstract); | |
671 Py_DECREF(isabstract); | |
672 return res; | |
673 } | |
674 | |
675 PyObject * | |
676 _PyObject_GetAttrId(PyObject *v, _Py_Identifier *name) | |
677 { | |
678 PyObject *result; | |
679 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */ | |
680 if (!oname) | |
681 return NULL; | |
682 result = PyObject_GetAttr(v, oname); | |
683 return result; | |
684 } | |
685 | |
686 int | |
687 _PyObject_HasAttrId(PyObject *v, _Py_Identifier *name) | |
688 { | |
689 int result; | |
690 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */ | |
691 if (!oname) | |
692 return -1; | |
693 result = PyObject_HasAttr(v, oname); | |
694 return result; | |
695 } | |
696 | |
697 int | |
698 _PyObject_SetAttrId(PyObject *v, _Py_Identifier *name, PyObject *w) | |
699 { | |
700 int result; | |
701 PyObject *oname = _PyUnicode_FromId(name); /* borrowed */ | |
702 if (!oname) | |
703 return -1; | |
704 result = PyObject_SetAttr(v, oname, w); | |
705 return result; | |
706 } | |
707 | |
708 PyObject * | |
709 PyObject_GetAttr(PyObject *v, PyObject *name) | |
710 { | |
711 PyTypeObject *tp = Py_TYPE(v); | |
712 | |
713 if (!PyUnicode_Check(name)) { | |
714 PyErr_Format(PyExc_TypeError, | |
715 "attribute name must be string, not '%.200s'", | |
716 name->ob_type->tp_name); | |
717 return NULL; | |
718 } | |
719 if (tp->tp_getattro != NULL) | |
720 return (*tp->tp_getattro)(v, name); | |
721 if (tp->tp_getattr != NULL) { | |
722 char *name_str = _PyUnicode_AsString(name); | |
723 if (name_str == NULL) | |
724 return NULL; | |
725 return (*tp->tp_getattr)(v, name_str); | |
726 } | |
727 PyErr_Format(PyExc_AttributeError, | |
728 "'%.50s' object has no attribute '%U'", | |
729 tp->tp_name, name); | |
730 return NULL; | |
731 } | |
732 | |
733 int | |
734 PyObject_HasAttr(PyObject *v, PyObject *name) | |
735 { | |
736 PyObject *res = PyObject_GetAttr(v, name); | |
737 if (res != NULL) { | |
738 Py_DECREF(res); | |
739 return 1; | |
740 } | |
741 PyErr_Clear(); | |
742 return 0; | |
743 } | |
744 | |
745 int | |
746 PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value) | |
747 { | |
748 PyTypeObject *tp = Py_TYPE(v); | |
749 int err; | |
750 | |
751 if (!PyUnicode_Check(name)) { | |
752 PyErr_Format(PyExc_TypeError, | |
753 "attribute name must be string, not '%.200s'", | |
754 name->ob_type->tp_name); | |
755 return -1; | |
756 } | |
757 Py_INCREF(name); | |
758 | |
759 PyUnicode_InternInPlace(&name); | |
760 if (tp->tp_setattro != NULL) { | |
761 err = (*tp->tp_setattro)(v, name, value); | |
762 Py_DECREF(name); | |
763 return err; | |
764 } | |
765 if (tp->tp_setattr != NULL) { | |
766 char *name_str = _PyUnicode_AsString(name); | |
767 if (name_str == NULL) | |
768 return -1; | |
769 err = (*tp->tp_setattr)(v, name_str, value); | |
770 Py_DECREF(name); | |
771 return err; | |
772 } | |
773 Py_DECREF(name); | |
774 assert(name->ob_refcnt >= 1); | |
775 if (tp->tp_getattr == NULL && tp->tp_getattro == NULL) | |
776 PyErr_Format(PyExc_TypeError, | |
777 "'%.100s' object has no attributes " | |
778 "(%s .%U)", | |
779 tp->tp_name, | |
780 value==NULL ? "del" : "assign to", | |
781 name); | |
782 else | |
783 PyErr_Format(PyExc_TypeError, | |
784 "'%.100s' object has only read-only attributes " | |
785 "(%s .%U)", | |
786 tp->tp_name, | |
787 value==NULL ? "del" : "assign to", | |
788 name); | |
789 return -1; | |
790 } | |
791 | |
792 /* Helper to get a pointer to an object's __dict__ slot, if any */ | |
793 | |
794 PyObject ** | |
795 _PyObject_GetDictPtr(PyObject *obj) | |
796 { | |
797 Py_ssize_t dictoffset; | |
798 PyTypeObject *tp = Py_TYPE(obj); | |
799 | |
800 dictoffset = tp->tp_dictoffset; | |
801 if (dictoffset == 0) | |
802 return NULL; | |
803 if (dictoffset < 0) { | |
804 Py_ssize_t tsize; | |
805 size_t size; | |
806 | |
807 tsize = ((PyVarObject *)obj)->ob_size; | |
808 if (tsize < 0) | |
809 tsize = -tsize; | |
810 size = _PyObject_VAR_SIZE(tp, tsize); | |
811 | |
812 dictoffset += (long)size; | |
813 assert(dictoffset > 0); | |
814 assert(dictoffset % SIZEOF_VOID_P == 0); | |
815 } | |
816 return (PyObject **) ((char *)obj + dictoffset); | |
817 } | |
818 | |
819 PyObject * | |
820 PyObject_SelfIter(PyObject *obj) | |
821 { | |
822 Py_INCREF(obj); | |
823 return obj; | |
824 } | |
825 | |
826 /* Helper used when the __next__ method is removed from a type: | |
827 tp_iternext is never NULL and can be safely called without checking | |
828 on every iteration. | |
829 */ | |
830 | |
831 PyObject * | |
832 _PyObject_NextNotImplemented(PyObject *self) | |
833 { | |
834 PyErr_Format(PyExc_TypeError, | |
835 "'%.200s' object is not iterable", | |
836 Py_TYPE(self)->tp_name); | |
837 return NULL; | |
838 } | |
839 | |
840 /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */ | |
841 | |
842 PyObject * | |
843 _PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name, PyObject *dict) | |
844 { | |
845 PyTypeObject *tp = Py_TYPE(obj); | |
846 PyObject *descr = NULL; | |
847 PyObject *res = NULL; | |
848 descrgetfunc f; | |
849 Py_ssize_t dictoffset; | |
850 PyObject **dictptr; | |
851 | |
852 if (!PyUnicode_Check(name)){ | |
853 PyErr_Format(PyExc_TypeError, | |
854 "attribute name must be string, not '%.200s'", | |
855 name->ob_type->tp_name); | |
856 return NULL; | |
857 } | |
858 else | |
859 Py_INCREF(name); | |
860 | |
861 if (tp->tp_dict == NULL) { | |
862 if (PyType_Ready(tp) < 0) | |
863 goto done; | |
864 } | |
865 | |
866 descr = _PyType_Lookup(tp, name); | |
867 Py_XINCREF(descr); | |
868 | |
869 f = NULL; | |
870 if (descr != NULL) { | |
871 f = descr->ob_type->tp_descr_get; | |
872 if (f != NULL && PyDescr_IsData(descr)) { | |
873 res = f(descr, obj, (PyObject *)obj->ob_type); | |
874 Py_DECREF(descr); | |
875 goto done; | |
876 } | |
877 } | |
878 | |
879 if (dict == NULL) { | |
880 /* Inline _PyObject_GetDictPtr */ | |
881 dictoffset = tp->tp_dictoffset; | |
882 if (dictoffset != 0) { | |
883 if (dictoffset < 0) { | |
884 Py_ssize_t tsize; | |
885 size_t size; | |
886 | |
887 tsize = ((PyVarObject *)obj)->ob_size; | |
888 if (tsize < 0) | |
889 tsize = -tsize; | |
890 size = _PyObject_VAR_SIZE(tp, tsize); | |
891 | |
892 dictoffset += (long)size; | |
893 assert(dictoffset > 0); | |
894 assert(dictoffset % SIZEOF_VOID_P == 0); | |
895 } | |
896 dictptr = (PyObject **) ((char *)obj + dictoffset); | |
897 dict = *dictptr; | |
898 } | |
899 } | |
900 if (dict != NULL) { | |
901 Py_INCREF(dict); | |
902 res = PyDict_GetItem(dict, name); | |
903 if (res != NULL) { | |
904 Py_INCREF(res); | |
905 Py_XDECREF(descr); | |
906 Py_DECREF(dict); | |
907 goto done; | |
908 } | |
909 Py_DECREF(dict); | |
910 } | |
911 | |
912 if (f != NULL) { | |
913 res = f(descr, obj, (PyObject *)Py_TYPE(obj)); | |
914 Py_DECREF(descr); | |
915 goto done; | |
916 } | |
917 | |
918 if (descr != NULL) { | |
919 res = descr; | |
920 /* descr was already increfed above */ | |
921 goto done; | |
922 } | |
923 | |
924 PyErr_Format(PyExc_AttributeError, | |
925 "'%.50s' object has no attribute '%U'", | |
926 tp->tp_name, name); | |
927 done: | |
928 Py_DECREF(name); | |
929 return res; | |
930 } | |
931 | |
932 PyObject * | |
933 PyObject_GenericGetAttr(PyObject *obj, PyObject *name) | |
934 { | |
935 return _PyObject_GenericGetAttrWithDict(obj, name, NULL); | |
936 } | |
937 | |
938 int | |
939 _PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name, | |
940 PyObject *value, PyObject *dict) | |
941 { | |
942 PyTypeObject *tp = Py_TYPE(obj); | |
943 PyObject *descr; | |
944 descrsetfunc f; | |
945 PyObject **dictptr; | |
946 int res = -1; | |
947 | |
948 if (!PyUnicode_Check(name)){ | |
949 PyErr_Format(PyExc_TypeError, | |
950 "attribute name must be string, not '%.200s'", | |
951 name->ob_type->tp_name); | |
952 return -1; | |
953 } | |
954 else | |
955 Py_INCREF(name); | |
956 | |
957 if (tp->tp_dict == NULL) { | |
958 if (PyType_Ready(tp) < 0) | |
959 goto done; | |
960 } | |
961 | |
962 descr = _PyType_Lookup(tp, name); | |
963 f = NULL; | |
964 if (descr != NULL) { | |
965 f = descr->ob_type->tp_descr_set; | |
966 if (f != NULL && PyDescr_IsData(descr)) { | |
967 res = f(descr, obj, value); | |
968 goto done; | |
969 } | |
970 } | |
971 | |
972 if (dict == NULL) { | |
973 dictptr = _PyObject_GetDictPtr(obj); | |
974 if (dictptr != NULL) { | |
975 dict = *dictptr; | |
976 if (dict == NULL && value != NULL) { | |
977 dict = PyDict_New(); | |
978 if (dict == NULL) | |
979 goto done; | |
980 *dictptr = dict; | |
981 } | |
982 } | |
983 } | |
984 if (dict != NULL) { | |
985 Py_INCREF(dict); | |
986 if (value == NULL) | |
987 res = PyDict_DelItem(dict, name); | |
988 else | |
989 res = PyDict_SetItem(dict, name, value); | |
990 if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) | |
991 PyErr_SetObject(PyExc_AttributeError, name); | |
992 Py_DECREF(dict); | |
993 goto done; | |
994 } | |
995 | |
996 if (f != NULL) { | |
997 res = f(descr, obj, value); | |
998 goto done; | |
999 } | |
1000 | |
1001 if (descr == NULL) { | |
1002 PyErr_Format(PyExc_AttributeError, | |
1003 "'%.100s' object has no attribute '%U'", | |
1004 tp->tp_name, name); | |
1005 goto done; | |
1006 } | |
1007 | |
1008 PyErr_Format(PyExc_AttributeError, | |
1009 "'%.50s' object attribute '%U' is read-only", | |
1010 tp->tp_name, name); | |
1011 done: | |
1012 Py_DECREF(name); | |
1013 return res; | |
1014 } | |
1015 | |
1016 int | |
1017 PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value) | |
1018 { | |
1019 return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL); | |
1020 } | |
1021 | |
1022 | |
1023 /* Test a value used as condition, e.g., in a for or if statement. | |
1024 Return -1 if an error occurred */ | |
1025 | |
1026 int | |
1027 PyObject_IsTrue(PyObject *v) | |
1028 { | |
1029 Py_ssize_t res; | |
1030 if (v == Py_True) | |
1031 return 1; | |
1032 if (v == Py_False) | |
1033 return 0; | |
1034 if (v == Py_None) | |
1035 return 0; | |
1036 else if (v->ob_type->tp_as_number != NULL && | |
1037 v->ob_type->tp_as_number->nb_bool != NULL) | |
1038 res = (*v->ob_type->tp_as_number->nb_bool)(v); | |
1039 else if (v->ob_type->tp_as_mapping != NULL && | |
1040 v->ob_type->tp_as_mapping->mp_length != NULL) | |
1041 res = (*v->ob_type->tp_as_mapping->mp_length)(v); | |
1042 else if (v->ob_type->tp_as_sequence != NULL && | |
1043 v->ob_type->tp_as_sequence->sq_length != NULL) | |
1044 res = (*v->ob_type->tp_as_sequence->sq_length)(v); | |
1045 else | |
1046 return 1; | |
1047 /* if it is negative, it should be either -1 or -2 */ | |
1048 return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int); | |
1049 } | |
1050 | |
1051 /* equivalent of 'not v' | |
1052 Return -1 if an error occurred */ | |
1053 | |
1054 int | |
1055 PyObject_Not(PyObject *v) | |
1056 { | |
1057 int res; | |
1058 res = PyObject_IsTrue(v); | |
1059 if (res < 0) | |
1060 return res; | |
1061 return res == 0; | |
1062 } | |
1063 | |
1064 /* Test whether an object can be called */ | |
1065 | |
1066 int | |
1067 PyCallable_Check(PyObject *x) | |
1068 { | |
1069 if (x == NULL) | |
1070 return 0; | |
1071 return x->ob_type->tp_call != NULL; | |
1072 } | |
1073 | |
1074 | |
1075 /* Helper for PyObject_Dir without arguments: returns the local scope. */ | |
1076 static PyObject * | |
1077 _dir_locals(void) | |
1078 { | |
1079 PyObject *names; | |
1080 PyObject *locals = PyEval_GetLocals(); | |
1081 | |
1082 if (locals == NULL) { | |
1083 PyErr_SetString(PyExc_SystemError, "frame does not exist"); | |
1084 return NULL; | |
1085 } | |
1086 | |
1087 names = PyMapping_Keys(locals); | |
1088 if (!names) | |
1089 return NULL; | |
1090 if (!PyList_Check(names)) { | |
1091 PyErr_Format(PyExc_TypeError, | |
1092 "dir(): expected keys() of locals to be a list, " | |
1093 "not '%.200s'", Py_TYPE(names)->tp_name); | |
1094 Py_DECREF(names); | |
1095 return NULL; | |
1096 } | |
1097 if (PyList_Sort(names)) { | |
1098 Py_DECREF(names); | |
1099 return NULL; | |
1100 } | |
1101 /* the locals don't need to be DECREF'd */ | |
1102 return names; | |
1103 } | |
1104 | |
1105 /* Helper for PyObject_Dir: object introspection. */ | |
1106 static PyObject * | |
1107 _dir_object(PyObject *obj) | |
1108 { | |
1109 PyObject *result, *sorted; | |
1110 static PyObject *dir_str = NULL; | |
1111 PyObject *dirfunc = _PyObject_LookupSpecial(obj, "__dir__", &dir_str); | |
1112 | |
1113 assert(obj); | |
1114 if (dirfunc == NULL) { | |
1115 if (!PyErr_Occurred()) | |
1116 PyErr_SetString(PyExc_TypeError, "object does not provide __dir__"); | |
1117 return NULL; | |
1118 } | |
1119 /* use __dir__ */ | |
1120 result = PyObject_CallFunctionObjArgs(dirfunc, NULL); | |
1121 Py_DECREF(dirfunc); | |
1122 if (result == NULL) | |
1123 return NULL; | |
1124 /* return sorted(result) */ | |
1125 sorted = PySequence_List(result); | |
1126 Py_DECREF(result); | |
1127 if (sorted == NULL) | |
1128 return NULL; | |
1129 if (PyList_Sort(sorted)) { | |
1130 Py_DECREF(sorted); | |
1131 return NULL; | |
1132 } | |
1133 return sorted; | |
1134 } | |
1135 | |
1136 /* Implementation of dir() -- if obj is NULL, returns the names in the current | |
1137 (local) scope. Otherwise, performs introspection of the object: returns a | |
1138 sorted list of attribute names (supposedly) accessible from the object | |
1139 */ | |
1140 PyObject * | |
1141 PyObject_Dir(PyObject *obj) | |
1142 { | |
1143 return (obj == NULL) ? _dir_locals() : _dir_object(obj); | |
1144 } | |
1145 | |
1146 /* | |
1147 None is a non-NULL undefined value. | |
1148 There is (and should be!) no way to create other objects of this type, | |
1149 so there is exactly one (which is indestructible, by the way). | |
1150 */ | |
1151 | |
1152 /* ARGSUSED */ | |
1153 static PyObject * | |
1154 none_repr(PyObject *op) | |
1155 { | |
1156 return PyUnicode_FromString("None"); | |
1157 } | |
1158 | |
1159 /* ARGUSED */ | |
1160 static void | |
1161 none_dealloc(PyObject* ignore) | |
1162 { | |
1163 /* This should never get called, but we also don't want to SEGV if | |
1164 * we accidentally decref None out of existence. | |
1165 */ | |
1166 Py_FatalError("deallocating None"); | |
1167 } | |
1168 | |
1169 static PyObject * | |
1170 none_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) | |
1171 { | |
1172 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) { | |
1173 PyErr_SetString(PyExc_TypeError, "NoneType takes no arguments"); | |
1174 return NULL; | |
1175 } | |
1176 Py_RETURN_NONE; | |
1177 } | |
1178 | |
1179 static int | |
1180 none_bool(PyObject *v) | |
1181 { | |
1182 return 0; | |
1183 } | |
1184 | |
1185 static PyNumberMethods none_as_number = { | |
1186 0, /* nb_add */ | |
1187 0, /* nb_subtract */ | |
1188 0, /* nb_multiply */ | |
1189 0, /* nb_remainder */ | |
1190 0, /* nb_divmod */ | |
1191 0, /* nb_power */ | |
1192 0, /* nb_negative */ | |
1193 0, /* nb_positive */ | |
1194 0, /* nb_absolute */ | |
1195 (inquiry)none_bool, /* nb_bool */ | |
1196 0, /* nb_invert */ | |
1197 0, /* nb_lshift */ | |
1198 0, /* nb_rshift */ | |
1199 0, /* nb_and */ | |
1200 0, /* nb_xor */ | |
1201 0, /* nb_or */ | |
1202 0, /* nb_int */ | |
1203 0, /* nb_reserved */ | |
1204 0, /* nb_float */ | |
1205 0, /* nb_inplace_add */ | |
1206 0, /* nb_inplace_subtract */ | |
1207 0, /* nb_inplace_multiply */ | |
1208 0, /* nb_inplace_remainder */ | |
1209 0, /* nb_inplace_power */ | |
1210 0, /* nb_inplace_lshift */ | |
1211 0, /* nb_inplace_rshift */ | |
1212 0, /* nb_inplace_and */ | |
1213 0, /* nb_inplace_xor */ | |
1214 0, /* nb_inplace_or */ | |
1215 0, /* nb_floor_divide */ | |
1216 0, /* nb_true_divide */ | |
1217 0, /* nb_inplace_floor_divide */ | |
1218 0, /* nb_inplace_true_divide */ | |
1219 0, /* nb_index */ | |
1220 }; | |
1221 | |
1222 static PyTypeObject PyNone_Type = { | |
1223 PyVarObject_HEAD_INIT(&PyType_Type, 0) | |
1224 "NoneType", | |
1225 0, | |
1226 0, | |
1227 none_dealloc, /*tp_dealloc*/ /*never called*/ | |
1228 0, /*tp_print*/ | |
1229 0, /*tp_getattr*/ | |
1230 0, /*tp_setattr*/ | |
1231 0, /*tp_reserved*/ | |
1232 none_repr, /*tp_repr*/ | |
1233 &none_as_number, /*tp_as_number*/ | |
1234 0, /*tp_as_sequence*/ | |
1235 0, /*tp_as_mapping*/ | |
1236 0, /*tp_hash */ | |
1237 0, /*tp_call */ | |
1238 0, /*tp_str */ | |
1239 0, /*tp_getattro */ | |
1240 0, /*tp_setattro */ | |
1241 0, /*tp_as_buffer */ | |
1242 Py_TPFLAGS_DEFAULT, /*tp_flags */ | |
1243 0, /*tp_doc */ | |
1244 0, /*tp_traverse */ | |
1245 0, /*tp_clear */ | |
1246 0, /*tp_richcompare */ | |
1247 0, /*tp_weaklistoffset */ | |
1248 0, /*tp_iter */ | |
1249 0, /*tp_iternext */ | |
1250 0, /*tp_methods */ | |
1251 0, /*tp_members */ | |
1252 0, /*tp_getset */ | |
1253 0, /*tp_base */ | |
1254 0, /*tp_dict */ | |
1255 0, /*tp_descr_get */ | |
1256 0, /*tp_descr_set */ | |
1257 0, /*tp_dictoffset */ | |
1258 0, /*tp_init */ | |
1259 0, /*tp_alloc */ | |
1260 none_new, /*tp_new */ | |
1261 }; | |
1262 | |
1263 PyObject _Py_NoneStruct = { | |
1264 _PyObject_EXTRA_INIT | |
1265 1, &PyNone_Type | |
1266 }; | |
1267 | |
1268 /* NotImplemented is an object that can be used to signal that an | |
1269 operation is not implemented for the given type combination. */ | |
1270 | |
1271 static PyObject * | |
1272 NotImplemented_repr(PyObject *op) | |
1273 { | |
1274 return PyUnicode_FromString("NotImplemented"); | |
1275 } | |
1276 | |
1277 static PyObject * | |
1278 notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) | |
1279 { | |
1280 if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_Size(kwargs))) { | |
1281 PyErr_SetString(PyExc_TypeError, "NotImplementedType takes no arguments"); | |
1282 return NULL; | |
1283 } | |
1284 Py_RETURN_NOTIMPLEMENTED; | |
1285 } | |
1286 | |
1287 static PyTypeObject PyNotImplemented_Type = { | |
1288 PyVarObject_HEAD_INIT(&PyType_Type, 0) | |
1289 "NotImplementedType", | |
1290 0, | |
1291 0, | |
1292 none_dealloc, /*tp_dealloc*/ /*never called*/ | |
1293 0, /*tp_print*/ | |
1294 0, /*tp_getattr*/ | |
1295 0, /*tp_setattr*/ | |
1296 0, /*tp_reserved*/ | |
1297 NotImplemented_repr, /*tp_repr*/ | |
1298 0, /*tp_as_number*/ | |
1299 0, /*tp_as_sequence*/ | |
1300 0, /*tp_as_mapping*/ | |
1301 0, /*tp_hash */ | |
1302 0, /*tp_call */ | |
1303 0, /*tp_str */ | |
1304 0, /*tp_getattro */ | |
1305 0, /*tp_setattro */ | |
1306 0, /*tp_as_buffer */ | |
1307 Py_TPFLAGS_DEFAULT, /*tp_flags */ | |
1308 0, /*tp_doc */ | |
1309 0, /*tp_traverse */ | |
1310 0, /*tp_clear */ | |
1311 0, /*tp_richcompare */ | |
1312 0, /*tp_weaklistoffset */ | |
1313 0, /*tp_iter */ | |
1314 0, /*tp_iternext */ | |
1315 0, /*tp_methods */ | |
1316 0, /*tp_members */ | |
1317 0, /*tp_getset */ | |
1318 0, /*tp_base */ | |
1319 0, /*tp_dict */ | |
1320 0, /*tp_descr_get */ | |
1321 0, /*tp_descr_set */ | |
1322 0, /*tp_dictoffset */ | |
1323 0, /*tp_init */ | |
1324 0, /*tp_alloc */ | |
1325 notimplemented_new, /*tp_new */ | |
1326 }; | |
1327 | |
1328 PyObject _Py_NotImplementedStruct = { | |
1329 _PyObject_EXTRA_INIT | |
1330 1, &PyNotImplemented_Type | |
1331 }; | |
1332 | |
1333 void | |
1334 _Py_ReadyTypes(void) | |
1335 { | |
1336 if (PyType_Ready(&PyType_Type) < 0) | |
1337 Py_FatalError("Can't initialize type type"); | |
1338 | |
1339 if (PyType_Ready(&_PyWeakref_RefType) < 0) | |
1340 Py_FatalError("Can't initialize weakref type"); | |
1341 | |
1342 if (PyType_Ready(&_PyWeakref_CallableProxyType) < 0) | |
1343 Py_FatalError("Can't initialize callable weakref proxy type"); | |
1344 | |
1345 if (PyType_Ready(&_PyWeakref_ProxyType) < 0) | |
1346 Py_FatalError("Can't initialize weakref proxy type"); | |
1347 | |
1348 if (PyType_Ready(&PyBool_Type) < 0) | |
1349 Py_FatalError("Can't initialize bool type"); | |
1350 | |
1351 if (PyType_Ready(&PyByteArray_Type) < 0) | |
1352 Py_FatalError("Can't initialize bytearray type"); | |
1353 | |
1354 if (PyType_Ready(&PyBytes_Type) < 0) | |
1355 Py_FatalError("Can't initialize 'str'"); | |
1356 | |
1357 if (PyType_Ready(&PyList_Type) < 0) | |
1358 Py_FatalError("Can't initialize list type"); | |
1359 | |
1360 if (PyType_Ready(&PyNone_Type) < 0) | |
1361 Py_FatalError("Can't initialize None type"); | |
1362 | |
1363 if (PyType_Ready(&PyNotImplemented_Type) < 0) | |
1364 Py_FatalError("Can't initialize NotImplemented type"); | |
1365 | |
1366 if (PyType_Ready(&PyTraceBack_Type) < 0) | |
1367 Py_FatalError("Can't initialize traceback type"); | |
1368 | |
1369 if (PyType_Ready(&PySuper_Type) < 0) | |
1370 Py_FatalError("Can't initialize super type"); | |
1371 | |
1372 if (PyType_Ready(&PyBaseObject_Type) < 0) | |
1373 Py_FatalError("Can't initialize object type"); | |
1374 | |
1375 if (PyType_Ready(&PyRange_Type) < 0) | |
1376 Py_FatalError("Can't initialize range type"); | |
1377 | |
1378 if (PyType_Ready(&PyDict_Type) < 0) | |
1379 Py_FatalError("Can't initialize dict type"); | |
1380 | |
1381 if (PyType_Ready(&PySet_Type) < 0) | |
1382 Py_FatalError("Can't initialize set type"); | |
1383 | |
1384 if (PyType_Ready(&PyUnicode_Type) < 0) | |
1385 Py_FatalError("Can't initialize str type"); | |
1386 | |
1387 if (PyType_Ready(&PySlice_Type) < 0) | |
1388 Py_FatalError("Can't initialize slice type"); | |
1389 | |
1390 if (PyType_Ready(&PyStaticMethod_Type) < 0) | |
1391 Py_FatalError("Can't initialize static method type"); | |
1392 | |
1393 if (PyType_Ready(&PyComplex_Type) < 0) | |
1394 Py_FatalError("Can't initialize complex type"); | |
1395 | |
1396 if (PyType_Ready(&PyFloat_Type) < 0) | |
1397 Py_FatalError("Can't initialize float type"); | |
1398 | |
1399 if (PyType_Ready(&PyLong_Type) < 0) | |
1400 Py_FatalError("Can't initialize int type"); | |
1401 | |
1402 if (PyType_Ready(&PyFrozenSet_Type) < 0) | |
1403 Py_FatalError("Can't initialize frozenset type"); | |
1404 | |
1405 if (PyType_Ready(&PyProperty_Type) < 0) | |
1406 Py_FatalError("Can't initialize property type"); | |
1407 | |
1408 if (PyType_Ready(&PyMemoryView_Type) < 0) | |
1409 Py_FatalError("Can't initialize memoryview type"); | |
1410 | |
1411 if (PyType_Ready(&PyTuple_Type) < 0) | |
1412 Py_FatalError("Can't initialize tuple type"); | |
1413 | |
1414 if (PyType_Ready(&PyEnum_Type) < 0) | |
1415 Py_FatalError("Can't initialize enumerate type"); | |
1416 | |
1417 if (PyType_Ready(&PyReversed_Type) < 0) | |
1418 Py_FatalError("Can't initialize reversed type"); | |
1419 | |
1420 if (PyType_Ready(&PyStdPrinter_Type) < 0) | |
1421 Py_FatalError("Can't initialize StdPrinter"); | |
1422 | |
1423 if (PyType_Ready(&PyCode_Type) < 0) | |
1424 Py_FatalError("Can't initialize code type"); | |
1425 | |
1426 if (PyType_Ready(&PyFrame_Type) < 0) | |
1427 Py_FatalError("Can't initialize frame type"); | |
1428 | |
1429 if (PyType_Ready(&PyCFunction_Type) < 0) | |
1430 Py_FatalError("Can't initialize builtin function type"); | |
1431 | |
1432 if (PyType_Ready(&PyMethod_Type) < 0) | |
1433 Py_FatalError("Can't initialize method type"); | |
1434 | |
1435 if (PyType_Ready(&PyFunction_Type) < 0) | |
1436 Py_FatalError("Can't initialize function type"); | |
1437 | |
1438 if (PyType_Ready(&PyDictProxy_Type) < 0) | |
1439 Py_FatalError("Can't initialize dict proxy type"); | |
1440 | |
1441 if (PyType_Ready(&PyGen_Type) < 0) | |
1442 Py_FatalError("Can't initialize generator type"); | |
1443 | |
1444 if (PyType_Ready(&PyGetSetDescr_Type) < 0) | |
1445 Py_FatalError("Can't initialize get-set descriptor type"); | |
1446 | |
1447 if (PyType_Ready(&PyWrapperDescr_Type) < 0) | |
1448 Py_FatalError("Can't initialize wrapper type"); | |
1449 | |
1450 if (PyType_Ready(&_PyMethodWrapper_Type) < 0) | |
1451 Py_FatalError("Can't initialize method wrapper type"); | |
1452 | |
1453 if (PyType_Ready(&PyEllipsis_Type) < 0) | |
1454 Py_FatalError("Can't initialize ellipsis type"); | |
1455 | |
1456 if (PyType_Ready(&PyMemberDescr_Type) < 0) | |
1457 Py_FatalError("Can't initialize member descriptor type"); | |
1458 | |
1459 if (PyType_Ready(&PyFilter_Type) < 0) | |
1460 Py_FatalError("Can't initialize filter type"); | |
1461 | |
1462 if (PyType_Ready(&PyMap_Type) < 0) | |
1463 Py_FatalError("Can't initialize map type"); | |
1464 | |
1465 if (PyType_Ready(&PyZip_Type) < 0) | |
1466 Py_FatalError("Can't initialize zip type"); | |
1467 } | |
1468 | |
1469 | |
1470 #ifdef Py_TRACE_REFS | |
1471 | |
1472 void | |
1473 _Py_NewReference(PyObject *op) | |
1474 { | |
1475 _Py_INC_REFTOTAL; | |
1476 op->ob_refcnt = 1; | |
1477 _Py_AddToAllObjects(op, 1); | |
1478 _Py_INC_TPALLOCS(op); | |
1479 } | |
1480 | |
1481 void | |
1482 _Py_ForgetReference(register PyObject *op) | |
1483 { | |
1484 #ifdef SLOW_UNREF_CHECK | |
1485 register PyObject *p; | |
1486 #endif | |
1487 if (op->ob_refcnt < 0) | |
1488 Py_FatalError("UNREF negative refcnt"); | |
1489 if (op == &refchain || | |
1490 op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) { | |
1491 fprintf(stderr, "* ob\n"); | |
1492 _PyObject_Dump(op); | |
1493 fprintf(stderr, "* op->_ob_prev->_ob_next\n"); | |
1494 _PyObject_Dump(op->_ob_prev->_ob_next); | |
1495 fprintf(stderr, "* op->_ob_next->_ob_prev\n"); | |
1496 _PyObject_Dump(op->_ob_next->_ob_prev); | |
1497 Py_FatalError("UNREF invalid object"); | |
1498 } | |
1499 #ifdef SLOW_UNREF_CHECK | |
1500 for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) { | |
1501 if (p == op) | |
1502 break; | |
1503 } | |
1504 if (p == &refchain) /* Not found */ | |
1505 Py_FatalError("UNREF unknown object"); | |
1506 #endif | |
1507 op->_ob_next->_ob_prev = op->_ob_prev; | |
1508 op->_ob_prev->_ob_next = op->_ob_next; | |
1509 op->_ob_next = op->_ob_prev = NULL; | |
1510 _Py_INC_TPFREES(op); | |
1511 } | |
1512 | |
1513 void | |
1514 _Py_Dealloc(PyObject *op) | |
1515 { | |
1516 destructor dealloc = Py_TYPE(op)->tp_dealloc; | |
1517 _Py_ForgetReference(op); | |
1518 (*dealloc)(op); | |
1519 } | |
1520 | |
1521 /* Print all live objects. Because PyObject_Print is called, the | |
1522 * interpreter must be in a healthy state. | |
1523 */ | |
1524 void | |
1525 _Py_PrintReferences(FILE *fp) | |
1526 { | |
1527 PyObject *op; | |
1528 fprintf(fp, "Remaining objects:\n"); | |
1529 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) { | |
1530 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", op, op->ob_refcnt); | |
1531 if (PyObject_Print(op, fp, 0) != 0) | |
1532 PyErr_Clear(); | |
1533 putc('\n', fp); | |
1534 } | |
1535 } | |
1536 | |
1537 /* Print the addresses of all live objects. Unlike _Py_PrintReferences, this | |
1538 * doesn't make any calls to the Python C API, so is always safe to call. | |
1539 */ | |
1540 void | |
1541 _Py_PrintReferenceAddresses(FILE *fp) | |
1542 { | |
1543 PyObject *op; | |
1544 fprintf(fp, "Remaining object addresses:\n"); | |
1545 for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) | |
1546 fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", op, | |
1547 op->ob_refcnt, Py_TYPE(op)->tp_name); | |
1548 } | |
1549 | |
1550 PyObject * | |
1551 _Py_GetObjects(PyObject *self, PyObject *args) | |
1552 { | |
1553 int i, n; | |
1554 PyObject *t = NULL; | |
1555 PyObject *res, *op; | |
1556 | |
1557 if (!PyArg_ParseTuple(args, "i|O", &n, &t)) | |
1558 return NULL; | |
1559 op = refchain._ob_next; | |
1560 res = PyList_New(0); | |
1561 if (res == NULL) | |
1562 return NULL; | |
1563 for (i = 0; (n == 0 || i < n) && op != &refchain; i++) { | |
1564 while (op == self || op == args || op == res || op == t || | |
1565 (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) { | |
1566 op = op->_ob_next; | |
1567 if (op == &refchain) | |
1568 return res; | |
1569 } | |
1570 if (PyList_Append(res, op) < 0) { | |
1571 Py_DECREF(res); | |
1572 return NULL; | |
1573 } | |
1574 op = op->_ob_next; | |
1575 } | |
1576 return res; | |
1577 } | |
1578 | |
1579 #endif | |
1580 | |
1581 /* Hack to force loading of pycapsule.o */ | |
1582 PyTypeObject *_PyCapsule_hack = &PyCapsule_Type; | |
1583 | |
1584 | |
1585 /* Hack to force loading of abstract.o */ | |
1586 Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size; | |
1587 | |
1588 | |
1589 /* Python's malloc wrappers (see pymem.h) */ | |
1590 | |
1591 void * | |
1592 PyMem_Malloc(size_t nbytes) | |
1593 { | |
1594 return PyMem_MALLOC(nbytes); | |
1595 } | |
1596 | |
1597 void * | |
1598 PyMem_Realloc(void *p, size_t nbytes) | |
1599 { | |
1600 return PyMem_REALLOC(p, nbytes); | |
1601 } | |
1602 | |
1603 void | |
1604 PyMem_Free(void *p) | |
1605 { | |
1606 PyMem_FREE(p); | |
1607 } | |
1608 | |
1609 | |
1610 /* These methods are used to control infinite recursion in repr, str, print, | |
1611 etc. Container objects that may recursively contain themselves, | |
1612 e.g. builtin dictionaries and lists, should used Py_ReprEnter() and | |
1613 Py_ReprLeave() to avoid infinite recursion. | |
1614 | |
1615 Py_ReprEnter() returns 0 the first time it is called for a particular | |
1616 object and 1 every time thereafter. It returns -1 if an exception | |
1617 occurred. Py_ReprLeave() has no return value. | |
1618 | |
1619 See dictobject.c and listobject.c for examples of use. | |
1620 */ | |
1621 | |
1622 #define KEY "Py_Repr" | |
1623 | |
1624 int | |
1625 Py_ReprEnter(PyObject *obj) | |
1626 { | |
1627 PyObject *dict; | |
1628 PyObject *list; | |
1629 Py_ssize_t i; | |
1630 | |
1631 dict = PyThreadState_GetDict(); | |
1632 if (dict == NULL) | |
1633 return 0; | |
1634 list = PyDict_GetItemString(dict, KEY); | |
1635 if (list == NULL) { | |
1636 list = PyList_New(0); | |
1637 if (list == NULL) | |
1638 return -1; | |
1639 if (PyDict_SetItemString(dict, KEY, list) < 0) | |
1640 return -1; | |
1641 Py_DECREF(list); | |
1642 } | |
1643 i = PyList_GET_SIZE(list); | |
1644 while (--i >= 0) { | |
1645 if (PyList_GET_ITEM(list, i) == obj) | |
1646 return 1; | |
1647 } | |
1648 PyList_Append(list, obj); | |
1649 return 0; | |
1650 } | |
1651 | |
1652 void | |
1653 Py_ReprLeave(PyObject *obj) | |
1654 { | |
1655 PyObject *dict; | |
1656 PyObject *list; | |
1657 Py_ssize_t i; | |
1658 | |
1659 dict = PyThreadState_GetDict(); | |
1660 if (dict == NULL) | |
1661 return; | |
1662 list = PyDict_GetItemString(dict, KEY); | |
1663 if (list == NULL || !PyList_Check(list)) | |
1664 return; | |
1665 i = PyList_GET_SIZE(list); | |
1666 /* Count backwards because we always expect obj to be list[-1] */ | |
1667 while (--i >= 0) { | |
1668 if (PyList_GET_ITEM(list, i) == obj) { | |
1669 PyList_SetSlice(list, i, i + 1, NULL); | |
1670 break; | |
1671 } | |
1672 } | |
1673 } | |
1674 | |
1675 /* Trashcan support. */ | |
1676 | |
1677 /* Current call-stack depth of tp_dealloc calls. */ | |
1678 int _PyTrash_delete_nesting = 0; | |
1679 | |
1680 /* List of objects that still need to be cleaned up, singly linked via their | |
1681 * gc headers' gc_prev pointers. | |
1682 */ | |
1683 PyObject *_PyTrash_delete_later = NULL; | |
1684 | |
1685 /* Add op to the _PyTrash_delete_later list. Called when the current | |
1686 * call-stack depth gets large. op must be a currently untracked gc'ed | |
1687 * object, with refcount 0. Py_DECREF must already have been called on it. | |
1688 */ | |
1689 void | |
1690 _PyTrash_deposit_object(PyObject *op) | |
1691 { | |
1692 assert(PyObject_IS_GC(op)); | |
1693 assert(_Py_AS_GC(op)->gc.gc_refs == _PyGC_REFS_UNTRACKED); | |
1694 assert(op->ob_refcnt == 0); | |
1695 _Py_AS_GC(op)->gc.gc_prev = (PyGC_Head *)_PyTrash_delete_later; | |
1696 _PyTrash_delete_later = op; | |
1697 } | |
1698 | |
1699 /* Dealloccate all the objects in the _PyTrash_delete_later list. Called when | |
1700 * the call-stack unwinds again. | |
1701 */ | |
1702 void | |
1703 _PyTrash_destroy_chain(void) | |
1704 { | |
1705 while (_PyTrash_delete_later) { | |
1706 PyObject *op = _PyTrash_delete_later; | |
1707 destructor dealloc = Py_TYPE(op)->tp_dealloc; | |
1708 | |
1709 _PyTrash_delete_later = | |
1710 (PyObject*) _Py_AS_GC(op)->gc.gc_prev; | |
1711 | |
1712 /* Call the deallocator directly. This used to try to | |
1713 * fool Py_DECREF into calling it indirectly, but | |
1714 * Py_DECREF was already called on this object, and in | |
1715 * assorted non-release builds calling Py_DECREF again ends | |
1716 * up distorting allocation statistics. | |
1717 */ | |
1718 assert(op->ob_refcnt == 0); | |
1719 ++_PyTrash_delete_nesting; | |
1720 (*dealloc)(op); | |
1721 --_PyTrash_delete_nesting; | |
1722 } | |
1723 } | |
1724 | |
1725 #ifndef Py_TRACE_REFS | |
1726 /* For Py_LIMITED_API, we need an out-of-line version of _Py_Dealloc. | |
1727 Define this here, so we can undefine the macro. */ | |
1728 #undef _Py_Dealloc | |
1729 PyAPI_FUNC(void) _Py_Dealloc(PyObject *); | |
1730 void | |
1731 _Py_Dealloc(PyObject *op) | |
1732 { | |
1733 _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA | |
1734 (*Py_TYPE(op)->tp_dealloc)(op); | |
1735 } | |
1736 #endif | |
1737 |