@@ -288,11 +288,11 @@ class FrameSummary:
288288 """
289289
290290 __slots__ = ('filename' , 'lineno' , 'end_lineno' , 'colno' , 'end_colno' ,
291- 'name' , '_lines' , '_lines_dedented' , 'locals' )
291+ 'name' , '_lines' , '_lines_dedented' , 'locals' , '_frame' )
292292
293293 def __init__ (self , filename , lineno , name , * , lookup_line = True ,
294294 locals = None , line = None ,
295- end_lineno = None , colno = None , end_colno = None ):
295+ end_lineno = None , colno = None , end_colno = None , ** kwargs ):
296296 """Construct a FrameSummary.
297297
298298 :param lookup_line: If True, `linecache` is consulted for the source
@@ -308,6 +308,7 @@ def __init__(self, filename, lineno, name, *, lookup_line=True,
308308 self .colno = colno
309309 self .end_colno = end_colno
310310 self .name = name
311+ self ._frame = kwargs .get ("_frame" )
311312 self ._lines = line
312313 self ._lines_dedented = None
313314 if lookup_line :
@@ -347,7 +348,12 @@ def _set_lines(self):
347348 lines = []
348349 for lineno in range (self .lineno , self .end_lineno + 1 ):
349350 # treat errors (empty string) and empty lines (newline) as the same
350- lines .append (linecache .getline (self .filename , lineno ).rstrip ())
351+ line = None
352+ if self ._frame is not None and self .filename .startswith ("<" ):
353+ line = linecache ._getline_from_code (self ._frame .f_code , lineno , self ._frame .f_globals ).rstrip ()
354+ if line is None :
355+ line = linecache .getline (self .filename , lineno ).rstrip ()
356+ lines .append (line )
351357 self ._lines = "\n " .join (lines ) + "\n "
352358
353359 @property
@@ -480,9 +486,13 @@ def _extract_from_extended_frame_gen(klass, frame_gen, *, limit=None,
480486 f_locals = f .f_locals
481487 else :
482488 f_locals = None
483- result .append (FrameSummary (
484- filename , lineno , name , lookup_line = False , locals = f_locals ,
485- end_lineno = end_lineno , colno = colno , end_colno = end_colno ))
489+ result .append (
490+ FrameSummary (filename , lineno , name ,
491+ lookup_line = False , locals = f_locals ,
492+ end_lineno = end_lineno , colno = colno , end_colno = end_colno ,
493+ _frame = f ,
494+ )
495+ )
486496 for filename in fnames :
487497 linecache .checkcache (filename )
488498
0 commit comments