]> granicus.if.org Git - python/commitdiff
Sjoerd Mullender:
authorGuido van Rossum <guido@python.org>
Mon, 6 Mar 2000 20:39:59 +0000 (20:39 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 6 Mar 2000 20:39:59 +0000 (20:39 +0000)
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.

Lib/pdb.py

index 2e450989b722d8f71fa223920bb76f1953374f21..67387a92a808d6c6dcd768554f85efcc14d94814 100755 (executable)
@@ -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):