]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backport of patch #1159931/bug #1143895: inspect.getsource failed when
authorJohannes Gijsbers <jlg@dds.nl>
Sat, 12 Mar 2005 16:38:39 +0000 (16:38 +0000)
committerJohannes Gijsbers <jlg@dds.nl>
Sat, 12 Mar 2005 16:38:39 +0000 (16:38 +0000)
functions, etc., had comments after the colon, and some other cases.
This patch take a simpler approach that doesn't rely on looking for a
':'. Test cases are not backported, as test_inspect.py has been
rewritten using unittest on the trunk.

Thanks Simon Percivall!

Lib/inspect.py

index 05bb71b81b955b836ee443a7452296c30c9719c8..11c96e606e1fc888da58060e665ca9138d4aca0e 100644 (file)
@@ -503,6 +503,7 @@ class BlockFinder:
     """Provide a tokeneater() method to detect the end of a code block."""
     def __init__(self):
         self.indent = 0
+        self.islambda = False
         self.started = False
         self.passline = False
         self.last = 0
@@ -510,11 +511,8 @@ class BlockFinder:
     def tokeneater(self, type, token, (srow, scol), (erow, ecol), line):
         if not self.started:
             if token in ("def", "class", "lambda"):
-                lastcolon = line.rfind(":")
-                if lastcolon:
-                    oneline = re.search(r"\w", line[lastcolon:])
-                    if oneline and line[-2:] != "\\\n":
-                        raise EndOfBlock, srow
+                if token == "lambda":
+                    self.islambda = True
                 self.started = True
             self.passline = True
         elif type == tokenize.NEWLINE:
@@ -522,6 +520,8 @@ class BlockFinder:
             self.last = srow
         elif self.passline:
             pass
+        elif self.islambda:
+            raise EndOfBlock, self.last
         elif type == tokenize.INDENT:
             self.indent = self.indent + 1
             self.passline = True