• Amaury Forgeot d'Arc's avatar
    Correction for issue1265 (pdb bug with "with" statement). · f05149a2
    Amaury Forgeot d'Arc yazdı
    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.
    
    Seems a backport candidate, even if the case is less frequent in 2.5.
    f05149a2
ceval.c 97.1 KB