summaryrefslogtreecommitdiff
path: root/Lib/pdb.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2000-03-06 20:39:59 +0000
committerGuido van Rossum <guido@python.org>2000-03-06 20:39:59 +0000
commit1e10bdf0bf72bfb9f6635f53a2512e5529632cdf (patch)
tree28a391105bb6d455f07158f84c1fcebcfa9131a3 /Lib/pdb.py
parentae7b1a501681a645081ff9a2665455bd821895ad (diff)
downloadcpython-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-xLib/pdb.py36
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):