• Guido van Rossum's avatar
    Hopefully fix the profiler right. Add a test suite that checks that · f137f75a
    Guido van Rossum yazdı
    it deals correctly with some anomalous cases; according to this test
    suite I've fixed it right.
    
    The anomalous cases had to do with 'exception' events: these aren't
    generated when they would be most helpful, and the profiler has to
    work hard to recover the right information.  The problems occur when C
    code (such as hasattr(), which is used as the example here) calls back
    into Python code and clears an exception raised by that Python code.
    Consider this example:
    
        def foo():
            hasattr(obj, "bar")
    
    Where obj is an instance from a class like this:
    
        class C:
            def __getattr__(self, name):
                raise AttributeError
    
    The profiler sees the following sequence of events:
    
        call (foo)
        call (__getattr__)
        exception (in __getattr__)
        return (from foo)
    
    Previously, the profiler would assume the return event returned from
    __getattr__. An if statement checking for this condition and raising
    an exception was commented out...  This version does the right thing.
    f137f75a
test_profile 810 Bytes