diff options
author | Guido van Rossum <guido@python.org> | 2000-03-06 20:39:59 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2000-03-06 20:39:59 (GMT) |
commit | e85c93f52109711f415e860ba41609ae22984d92 (patch) | |
tree | ee2d483a09e6df91f84555bdea7b9c0c1781d4dd | |
parent | 0c3208aa628f090ce5a3278e6e53fe89c952f1b0 (diff) | |
download | cpython-e85c93f52109711f415e860ba41609ae22984d92.zip cpython-e85c93f52109711f415e860ba41609ae22984d92.tar.gz cpython-e85c93f52109711f415e860ba41609ae22984d92.tar.bz2 |
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.
-rwxr-xr-x | Lib/pdb.py | 36 |
1 files changed, 21 insertions, 15 deletions
@@ -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): |