Show More
@@ -90,7 +90,7 b' class CachingCompiler(codeop.Compile):' | |||||
90 | # Now, we must monkeypatch the linecache directly so that parts of the |
|
90 | # Now, we must monkeypatch the linecache directly so that parts of the | |
91 | # stdlib that call it outside our control go through our codepath |
|
91 | # stdlib that call it outside our control go through our codepath | |
92 | # (otherwise we'd lose our tracebacks). |
|
92 | # (otherwise we'd lose our tracebacks). | |
93 |
linecache.checkcache = |
|
93 | linecache.checkcache = check_linecache_ipython | |
94 |
|
94 | |||
95 | def ast_parse(self, source, filename='<unknown>', symbol='exec'): |
|
95 | def ast_parse(self, source, filename='<unknown>', symbol='exec'): | |
96 | """Parse code to an AST with the current compiler flags active. |
|
96 | """Parse code to an AST with the current compiler flags active. | |
@@ -134,7 +134,7 b' class CachingCompiler(codeop.Compile):' | |||||
134 | linecache._ipython_cache[name] = entry |
|
134 | linecache._ipython_cache[name] = entry | |
135 | return name |
|
135 | return name | |
136 |
|
136 | |||
137 |
|
|
137 | def check_linecache_ipython(*args): | |
138 |
|
|
138 | """Call linecache.checkcache() safely protecting our cached values. | |
139 |
|
|
139 | """ | |
140 |
|
|
140 | # First call the orignal checkcache as intended |
@@ -41,7 +41,7 b' from IPython.core import ultratb' | |||||
41 | from IPython.core.alias import AliasManager, AliasError |
|
41 | from IPython.core.alias import AliasManager, AliasError | |
42 | from IPython.core.autocall import ExitAutocall |
|
42 | from IPython.core.autocall import ExitAutocall | |
43 | from IPython.core.builtin_trap import BuiltinTrap |
|
43 | from IPython.core.builtin_trap import BuiltinTrap | |
44 | from IPython.core.compilerop import CachingCompiler |
|
44 | from IPython.core.compilerop import CachingCompiler, check_linecache_ipython | |
45 | from IPython.core.display_trap import DisplayTrap |
|
45 | from IPython.core.display_trap import DisplayTrap | |
46 | from IPython.core.displayhook import DisplayHook |
|
46 | from IPython.core.displayhook import DisplayHook | |
47 | from IPython.core.displaypub import DisplayPublisher |
|
47 | from IPython.core.displaypub import DisplayPublisher | |
@@ -1532,7 +1532,7 b' class InteractiveShell(SingletonConfigurable):' | |||||
1532 | self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain', |
|
1532 | self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain', | |
1533 | color_scheme='NoColor', |
|
1533 | color_scheme='NoColor', | |
1534 | tb_offset = 1, |
|
1534 | tb_offset = 1, | |
1535 |
check_cache= |
|
1535 | check_cache=check_linecache_ipython) | |
1536 |
|
1536 | |||
1537 | # The instance will store a pointer to the system-wide exception hook, |
|
1537 | # The instance will store a pointer to the system-wide exception hook, | |
1538 | # so that runtime code (such as magics) can access it. This is because |
|
1538 | # so that runtime code (such as magics) can access it. This is because | |
@@ -2587,12 +2587,7 b' class InteractiveShell(SingletonConfigurable):' | |||||
2587 | # Our own compiler remembers the __future__ environment. If we want to |
|
2587 | # Our own compiler remembers the __future__ environment. If we want to | |
2588 | # run code with a separate __future__ environment, use the default |
|
2588 | # run code with a separate __future__ environment, use the default | |
2589 | # compiler |
|
2589 | # compiler | |
2590 | if shell_futures: |
|
2590 | compiler = self.compile if shell_futures else CachingCompiler() | |
2591 | compiler = self.compile |
|
|||
2592 | ast_parse = self.compile.ast_parse |
|
|||
2593 | else: |
|
|||
2594 | compiler = compile |
|
|||
2595 | ast_parse = ast.parse |
|
|||
2596 |
|
2591 | |||
2597 | with self.builtin_trap: |
|
2592 | with self.builtin_trap: | |
2598 | prefilter_failed = False |
|
2593 | prefilter_failed = False | |
@@ -2622,7 +2617,7 b' class InteractiveShell(SingletonConfigurable):' | |||||
2622 |
|
2617 | |||
2623 | with self.display_trap: |
|
2618 | with self.display_trap: | |
2624 | try: |
|
2619 | try: | |
2625 | code_ast = ast_parse(cell, filename=cell_name) |
|
2620 | code_ast = compiler.ast_parse(cell, filename=cell_name) | |
2626 | except IndentationError: |
|
2621 | except IndentationError: | |
2627 | self.showindentationerror() |
|
2622 | self.showindentationerror() | |
2628 | if store_history: |
|
2623 | if store_history: |
@@ -67,7 +67,7 b' def test_compiler_check_cache():' | |||||
67 | cp = compilerop.CachingCompiler() |
|
67 | cp = compilerop.CachingCompiler() | |
68 | cp.cache('x=1', 99) |
|
68 | cp.cache('x=1', 99) | |
69 | # Ensure now that after clearing the cache, our entries survive |
|
69 | # Ensure now that after clearing the cache, our entries survive | |
70 |
|
|
70 | linecache.checkcache() | |
71 | for k in linecache.cache: |
|
71 | for k in linecache.cache: | |
72 | if k.startswith('<ipython-input-99'): |
|
72 | if k.startswith('<ipython-input-99'): | |
73 | break |
|
73 | break |
General Comments 0
You need to be logged in to leave comments.
Login now