From: Guido van Rossum Date: Mon, 6 Mar 2000 20:39:59 +0000 (+0000) Subject: Sjoerd Mullender: X-Git-Tag: v1.6a1~276 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e85c93f52109711f415e860ba41609ae22984d92;p=python 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. --- 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):