• Fred Drake's avatar
    Rationalize the events passed to the profiler (no changes for the tracer). · 8f51f543
    Fred Drake yazdı
    The profiler does not need to know anything about the exception state,
    so we no longer call it when an exception is raised.  We do, however,
    make sure we *always* call the profiler when we exit a frame.  This
    ensures that timing events are more easily isolated by a profiler and
    finally clauses that do a lot of work don't have their time
    mis-allocated.
    
    When an exception is propogated out of the frame, the C callback for
    the profiler now receives a PyTrace_RETURN event with an arg of NULL;
    the Python-level profile hook function will see a 'return' event with
    an arg of None.  This means that from Python it is impossible for the
    profiler to determine if the frame exited with an exception or if it
    returned None, but this doesn't matter for profiling.  A C-based
    profiler could tell the difference, but this doesn't seem important.
    
    ceval.c:eval_frame():  Simplify the code in two places so that the
                           profiler is called for every exit from a frame
                           and not for exceptions.
    
    sysmodule.c:profile_trampoline():  Make sure we don't expose Python
                                       code to NULL; use None instead.
    8f51f543
sysmodule.c 28 KB