• Jeremy Hylton's avatar
    potentially useless optimization · 9e392e24
    Jeremy Hylton authored
    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.
    9e392e24
classobject.c 39 KB