Skip to content

Commit 026f62a

Browse files
committed
Add _executable_linenos_cache
1 parent c4d4d7d commit 026f62a

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

Lib/bdb.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@ def _get_executable_linenos(code):
189189
return linenos
190190

191191

192+
_executable_linenos_cache = {}
193+
194+
192195
class Bdb:
193196
"""Generic Python debugger base class.
194197
@@ -683,13 +686,15 @@ def set_break(self, filename, lineno, temporary=False, cond=None,
683686
line = linecache.getline(filename, lineno)
684687
if not line:
685688
return 'Line %s:%d does not exist' % (filename, lineno)
686-
source = ''.join(linecache.getlines(filename))
687-
if source:
688-
with suppress(SyntaxError):
689-
code = compile(source, filename, 'exec')
690-
executable_lines = _get_executable_linenos(code)
691-
if executable_lines and lineno not in executable_lines:
692-
return 'Line %d has no code associated with it' % lineno
689+
if filename not in _executable_linenos_cache:
690+
source = ''.join(linecache.getlines(filename))
691+
if source:
692+
with suppress(SyntaxError):
693+
code = compile(source, filename, 'exec')
694+
_executable_linenos_cache[filename] = _get_executable_linenos(code)
695+
executable_lines = _executable_linenos_cache.get(filename)
696+
if executable_lines and lineno not in executable_lines:
697+
return 'Line %d has no code associated with it' % lineno
693698
self._add_to_breaks(filename, lineno)
694699
bp = Breakpoint(filename, lineno, temporary, cond, funcname)
695700
# After we set a new breakpoint, we need to search through all frames

0 commit comments

Comments
 (0)