Correct an error introduced at Rev 1.30. The keyword arg is necessary

to freeze the value of orig_checkcache.  Otherwise infinite recursion.
This commit is contained in:
Kurt B. Kaiser 2002-11-29 22:10:53 +00:00
parent 24884f76c6
commit 818855939a
1 changed files with 8 additions and 6 deletions

View File

@ -45,15 +45,16 @@ else:
file.write(warnings.formatwarning(message, category, filename, lineno)) file.write(warnings.formatwarning(message, category, filename, lineno))
warnings.showwarning = idle_showwarning warnings.showwarning = idle_showwarning
def linecache_checkcache(): def extended_linecache_checkcache(orig_checkcache=linecache.checkcache):
"""Extend linecache.checkcache to preserve the <pyshell#...> entries """Extend linecache.checkcache to preserve the <pyshell#...> entries
Rather than repeating the linecache code, patch it by saving the pyshell# Rather than repeating the linecache code, patch it to save the pyshell#
entries, call linecache.checkcache(), and then restore the saved entries, call the original linecache.checkcache(), and then restore the
entries. saved entries. Assigning the orig_checkcache keyword arg freezes its value
at definition time to the (original) method linecache.checkcache(), i.e.
makes orig_checkcache lexical.
""" """
orig_checkcache=linecache.checkcache
cache = linecache.cache cache = linecache.cache
save = {} save = {}
for filename in cache.keys(): for filename in cache.keys():
@ -62,7 +63,8 @@ def linecache_checkcache():
orig_checkcache() orig_checkcache()
cache.update(save) cache.update(save)
linecache.checkcache = linecache_checkcache # Patch linecache.checkcache():
linecache.checkcache = extended_linecache_checkcache
class PyShellEditorWindow(EditorWindow): class PyShellEditorWindow(EditorWindow):