diff options
author | Guido van Rossum <guido@python.org> | 2000-03-06 20:39:59 +0000 |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2000-03-06 20:39:59 +0000 |
commit | 1e10bdf0bf72bfb9f6635f53a2512e5529632cdf (patch) | |
tree | 28a391105bb6d455f07158f84c1fcebcfa9131a3 /Lib/pdb.py | |
parent | ae7b1a501681a645081ff9a2665455bd821895ad (diff) | |
download | cpython-1e10bdf0bf72bfb9f6635f53a2512e5529632cdf.tar.gz |
Sjoerd Mullender:
When you set a breakpoint on a function with a multi-line argument
list, the breakpoint is actually set on the second line of the
arguments instead of the first line of the body. This patch fixes
that.
Diffstat (limited to 'Lib/pdb.py')
-rwxr-xr-x | Lib/pdb.py | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/Lib/pdb.py b/Lib/pdb.py index 2e450989b7..67387a92a8 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -329,29 +329,35 @@ class Pdb(bdb.Bdb, cmd.Cmd): # code parse time. We don't want that, so all breakpoints # set at 'def' statements are moved one line onward if line[:3] == 'def': - incomment = '' + instr = '' + brackets = 0 while 1: + skipone = 0 + for c in line: + if instr: + if skipone: + skipone = 0 + elif c == '\\': + skipone = 1 + elif c == instr: + instr = '' + elif c == '#': + break + elif c in ('"',"'"): + instr = c + elif c in ('(','{','['): + brackets = brackets + 1 + elif c in (')','}',']'): + brackets = brackets - 1 lineno = lineno+1 line = linecache.getline(filename, lineno) if not line: print 'end of file' return 0 line = string.strip(line) - if incomment: - if len(line) < 3: continue - if (line[-3:] == incomment): - incomment = '' - continue if not line: continue # Blank line - if len(line) >= 3: - if (line[:3] == '"""' - or line[:3] == "'''"): - if line[-3:] == line[:3]: - # one-line string - continue - incomment = line[:3] - continue - if line[0] != '#': break + if brackets <= 0 and line[0] not in ('#','"',"'"): + break return lineno def do_enable(self, arg): |