Support "from __future__ import print_function" in interactive interpreters (fixes issue 2007) #81
+81
−5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In CPython,
from __future__ import print_function
works both in scripts and interactive interpreters; in the latter it can be enabled at any time and will apply to the parsing of all subsequent inputs. The same is true ofunicode_literals
.Jython implements this correctly in scripts, but it has never worked in interactive interpreters. This was reported early in Jython 2.7 development (https://bugs.jython.org/issue2007), but apparently today is the first time it's been sufficiently annoying for someone to dig into Jython guts and fix it ;)
The cause is that each input is handled by a new PythonParser, and PythonParser currently only enables future features if it sees the import statement itself. Fortunately the feature flags are also recorded in PythonInterpreter.cflags, and this is already passed to the ParserFacade that creates the parser instances, so it is straightforward to add the missing step and initialize the parser correctly.