Patch #1006219: let inspect.getsource show '@' decorators and add tests for
this (which are rather ugly, but it'll have to do until test_inspect gets a
major overhaul and a conversion to unittest). Thanks Simon Percivall!
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 42eda77..3c47cd9 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -433,7 +433,7 @@
         if not hasattr(object, 'co_firstlineno'):
             raise IOError('could not find function definition')
         lnum = object.co_firstlineno - 1
-        pat = re.compile(r'^(\s*def\s)|(.*\slambda(:|\s))')
+        pat = re.compile(r'^(\s*def\s)|(.*\slambda(:|\s))|^(\s*@)')
         while lnum > 0:
             if pat.match(lines[lnum]): break
             lnum = lnum - 1
@@ -509,7 +509,8 @@
 
     def tokeneater(self, type, token, (srow, scol), (erow, ecol), line):
         if not self.started:
-            if type == tokenize.NAME: self.started = 1
+            if '@' in line: pass
+            elif type == tokenize.NAME: self.started = 1
         elif type == tokenize.NEWLINE:
             self.last = srow
         elif type == tokenize.INDENT: