Ticket #5854: inlinecallbacks-traceback-info-response-to-comments.patch

File inlinecallbacks-traceback-info-response-to-comments.patch, 2.3 KB (added by talljosh, 9 years ago)

Patch against inlinecallacks-traceback-info-5854 branch in response to comments

  • twisted/internet/defer.py

     
    10971097            return deferred
    10981098
    10991099        if isinstance(result, Deferred):
    1100             def extendErrbackStack(r):
     1100            def extendErrbackStack(f):
    11011101                """
    11021102                A failure was yielded by the generator, so for the failure's
    11031103                traceback to be useful insert the current yield line into the
    11041104                stack of frames.
    11051105                """
    1106                 f = g.gi_frame
     1106                frame = g.gi_frame
    11071107
    11081108                # The following code is lifted almost straight from
    11091109                # twisted.python.failure.Failure.__init__()
    1110                 localz = f.f_locals.copy()
    1111                 if f.f_locals is f.f_globals:
    1112                     globalz = {}
     1110                if f.captureVars:
     1111                    localz = frame.f_locals.copy()
     1112                    if frame.f_locals is frame.f_globals:
     1113                        globalz = {}
     1114                    else:
     1115                        globalz = frame.f_globals.copy()
     1116                    for d in globalz, localz:
     1117                        if d.has_key("__builtins__"):
     1118                            del d["__builtins__"]
     1119                    localz = list(localz.items())
     1120                    globalz = list(globalz.items())
    11131121                else:
    1114                     globalz = f.f_globals.copy()
    1115                 for d in globalz, localz:
    1116                     if d.has_key("__builtins__"):
    1117                         del d["__builtins__"]
     1122                    localz = globalz = ()
    11181123
    1119                 r.frames.insert(0, [
    1120                     f.f_code.co_name,
    1121                     f.f_code.co_filename,
    1122                     f.f_lineno,
    1123                     localz.items(),
    1124                     globalz.items(),
     1124                f.frames.insert(0, [
     1125                    frame.f_code.co_name,
     1126                    frame.f_code.co_filename,
     1127                    frame.f_lineno,
     1128                    localz,
     1129                    globalz,
    11251130                    ])
    1126                 return r
     1131                return f
    11271132            result.addErrback(extendErrbackStack)
    11281133
    11291134            # a deferred was yielded, get the result.