call site 3 for code.Source.getstatementrange
code/testing/test_excinfo.py - line 86
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
   def test_traceback_entry_getsource_in_construct(self):
       source = py.code.Source("""\
               def xyz():
                   try:
                       raise ValueError
                   except somenoname:
                       pass
               xyz()
           """) 
       try: 
           exec source.compile()
       except NameError: 
           tb = py.code.ExceptionInfo().traceback 
           print tb[-1].getsource()
->         s = str(tb[-1].getsource())
           assert s.startswith("def xyz():\n    try:")
           assert s.endswith("except somenoname:") 
code/traceback2.py - line 58
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
   def getsource(self): 
       """ return failing source code. """ 
       source = self.frame.code.fullsource
       start = self.getfirstlinesource()
       end = self.lineno
       try:
->         _, end = source.getstatementrange(end) 
       except IndexError: 
           end = self.lineno + 1 
       # heuristic to stop displaying source on e.g. 
       #   if something:  # assume this causes a NameError
       #      # _this_ lines and the one 
              #        below we don't want from entry.getsource() 
       for i in range(self.lineno, end): 
           if source[i].rstrip().endswith(':'): 
               end = i + 1
               break 
       return source[start:end]