mirror of
https://github.com/python/cpython.git
synced 2026-04-09 21:30:42 +00:00
The previous checkin (2.84) added a PyErr_Format call that made the cost of raising an AttributeError much more expensive. In general this doesn't matter, except that checks for __init__ and __del__ methods, where exceptions are caught and cleared in C, also got much more expensive. The fix is to split instance_getattr1 into two calls: instance_getattr2 checks the instance and the class for the attribute and returns it or returns NULL on error. It does not raise an exception. instance_getattr1 does rexec checks, then calls instance_getattr2. It raises an exception if instance_getattr2 returns NULL. PyInstance_New and instance_dealloc now call instance_getattr2 directly. |
||
|---|---|---|
| .. | ||
| abstract.c | ||
| bufferobject.c | ||
| classobject.c | ||
| cobject.c | ||
| complexobject.c | ||
| dictobject.c | ||
| fileobject.c | ||
| floatobject.c | ||
| frameobject.c | ||
| funcobject.c | ||
| intobject.c | ||
| listobject.c | ||
| longobject.c | ||
| Makefile.in | ||
| methodobject.c | ||
| moduleobject.c | ||
| object.c | ||
| rangeobject.c | ||
| sliceobject.c | ||
| stringobject.c | ||
| tupleobject.c | ||
| typeobject.c | ||
| unicodectype.c | ||
| unicodeobject.c | ||
| xxobject.c | ||