• Amaury Forgeot d'Arc's avatar
    Merge from py3k branch: · 0d75f091
    Amaury Forgeot d'Arc yazdı
    Correction for issue1265 (pdb bug with "with" statement).
    
    When an unfinished generator-iterator is garbage collected, PyEval_EvalFrameEx
    is called with a GeneratorExit exception set.  This leads to funny results
    if the sys.settrace function itself makes use of generators.
    A visible effect is that the settrace function is reset to None.
    Another is that the eventual "finally" block of the generator is not called.
    
    It is necessary to save/restore the exception around the call to the trace
    function.
    
    This happens a lot with py3k: isinstance() of an ABCMeta instance runs
        def __instancecheck__(cls, instance):
            """Override for isinstance(instance, cls)."""
            return any(cls.__subclasscheck__(c)
                       for c in {instance.__class__, type(instance)})
    which lets an opened generator expression each time it returns True.
    
    Backport candidate, even if the case is less frequent in 2.5.
    0d75f091
test_trace.py 19.8 KB