From: Johannes Gijsbers Date: Sat, 12 Mar 2005 16:38:39 +0000 (+0000) Subject: Backport of patch #1159931/bug #1143895: inspect.getsource failed when X-Git-Tag: v2.4.1c2~13 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d86254bc2514ec4fb9e62126c02ef2f6458db67d;p=thirdparty%2FPython%2Fcpython.git Backport of patch #1159931/bug #1143895: inspect.getsource failed when 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! --- diff --git a/Lib/inspect.py b/Lib/inspect.py index 05bb71b81b95..11c96e606e1f 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -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