Ignore:
Timestamp:
Mar 19, 2014, 11:11:30 AM (11 years ago)
Author:
dmik
Message:

python: Update vendor to 2.7.6.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • python/vendor/current/Lib/bdb.py

    r2 r388  
    11"""Debugger basics"""
    22
     3import fnmatch
    34import sys
    45import os
     
    2021    """
    2122
    22     def __init__(self):
     23    def __init__(self, skip=None):
     24        self.skip = set(skip) if skip else None
    2325        self.breaks = {}
    2426        self.fncache = {}
     27        self.frame_returning = None
    2528
    2629    def canonic(self, filename):
     
    8184    def dispatch_return(self, frame, arg):
    8285        if self.stop_here(frame) or frame == self.returnframe:
    83             self.user_return(frame, arg)
     86            try:
     87                self.frame_returning = frame
     88                self.user_return(frame, arg)
     89            finally:
     90                self.frame_returning = None
    8491            if self.quitting: raise BdbQuit
    8592        return self.trace_dispatch
     
    95102    # definition of stopping and breakpoints.
    96103
     104    def is_skipped_module(self, module_name):
     105        for pattern in self.skip:
     106            if fnmatch.fnmatch(module_name, pattern):
     107                return True
     108        return False
     109
    97110    def stop_here(self, frame):
    98111        # (CT) stopframe may now also be None, see dispatch_call.
    99112        # (CT) the former test for None is therefore removed from here.
     113        if self.skip and \
     114               self.is_skipped_module(frame.f_globals.get('__name__')):
     115            return False
    100116        if frame is self.stopframe:
     117            if self.stoplineno == -1:
     118                return False
    101119            return frame.f_lineno >= self.stoplineno
    102120        while frame is not None and frame is not self.stopframe:
     
    156174        pass
    157175
    158     def _set_stopinfo(self, stopframe, returnframe, stoplineno=-1):
     176    def _set_stopinfo(self, stopframe, returnframe, stoplineno=0):
    159177        self.stopframe = stopframe
    160178        self.returnframe = returnframe
    161179        self.quitting = 0
     180        # stoplineno >= 0 means: stop at line >= the stoplineno
     181        # stoplineno -1 means: don't stop at all
    162182        self.stoplineno = stoplineno
    163183
     
    172192    def set_step(self):
    173193        """Stop after one line of code."""
    174         self._set_stopinfo(None,None)
     194        # Issue #13183: pdb skips frames after hitting a breakpoint and running
     195        # step commands.
     196        # Restore the trace function in the caller (that may not have been set
     197        # for performance reasons) when returning from the current frame.
     198        if self.frame_returning:
     199            caller_frame = self.frame_returning.f_back
     200            if caller_frame and not caller_frame.f_trace:
     201                caller_frame.f_trace = self.trace_dispatch
     202        self._set_stopinfo(None, None)
    175203
    176204    def set_next(self, frame):
     
    199227    def set_continue(self):
    200228        # Don't stop except at breakpoints or when finished
    201         self._set_stopinfo(self.botframe, None)
     229        self._set_stopinfo(self.botframe, None, -1)
    202230        if not self.breaks:
    203231            # no breakpoints; run without debugger overhead
     
    236264        bp = Breakpoint(filename, lineno, temporary, cond, funcname)
    237265
     266    def _prune_breaks(self, filename, lineno):
     267        if (filename, lineno) not in Breakpoint.bplist:
     268            self.breaks[filename].remove(lineno)
     269        if not self.breaks[filename]:
     270            del self.breaks[filename]
     271
    238272    def clear_break(self, filename, lineno):
    239273        filename = self.canonic(filename)
     
    247281        for bp in Breakpoint.bplist[filename, lineno][:]:
    248282            bp.deleteMe()
    249         if not Breakpoint.bplist.has_key((filename, lineno)):
    250             self.breaks[filename].remove(lineno)
    251         if not self.breaks[filename]:
    252             del self.breaks[filename]
     283        self._prune_breaks(filename, lineno)
    253284
    254285    def clear_bpbynumber(self, arg):
     
    263294        if not bp:
    264295            return 'Breakpoint (%d) already deleted' % number
    265         self.clear_break(bp.file, bp.line)
     296        bp.deleteMe()
     297        self._prune_breaks(bp.file, bp.line)
    266298
    267299    def clear_all_file_breaks(self, filename):
     
    454486        # Build the two lists
    455487        self.bpbynumber.append(self)
    456         if self.bplist.has_key((file, line)):
     488        if (file, line) in self.bplist:
    457489            self.bplist[file, line].append(self)
    458490        else:
Note: See TracChangeset for help on using the changeset viewer.