GeezerVison is showing github.com — `barry_as_FLUFL` future flag does not work in new REPL · Issue #124960 · python/cpython
barry_as_FLUFL future flag does not work in new REPL #124960
DescriptionBug report
New REPL:
>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
File "<python-input-1>", line 1
1 <> 2
^^
SyntaxError: invalid syntax
Old REPL:
>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
True
I understand that this is just an easter egg :)
Linked PRs
Reacted by Roman Kitaev, Nicolae Godina, Konstantin Baikov, Ilya Siamionau, Ian Skliarov, Timofey Petelkov, Paul Repin, Alex Waygood, Alexey Sidorov, Thomas Grainger and 24 more Activitywarsaw commented on Oct 4, 2024 Clearly this is a showstopper bug requiring @Yhg1s to delay Python 3.13.0 for another week and another RC! No respect for the FLUFL eh @pablogsal ??? 😭 Reacted by Barry Warsaw, Lysandros Nikolaou, DmitriyManuilov, sobolevn, neumond, Nazar Kravtsov, Vlad Startsev, Ilya Siamionau, Ivan Kirpichnikov, Alexey Potapov and 25 more Yhg1s commented on Oct 4, 2024 I can't believe it, just last week @ambv and @pablogsal were complaining about how easter eggs were getting removed, and here they are, organising a coup! Clearly this should be fixed as soon as possible1!!!!
Footnotes
-
which means 3.13.1 ↩
Reacted by Pablo Galindo Salgado, Stanislav Zmiev, sobolevn, Nice Zombies, Hugo van Kemenade, Daniel Hollas, Thomas Grainger, Savannah Ostrowski and Amin Abbasov nineteendo commented on Oct 5, 2024 Hmm, it looks like it's working in the commit that introduced the new REPL: f27f8c7
 nineteendo commented on Oct 5, 2024 nineteendo commented on Oct 5, 2024 It's failing at this line:
nineteendo commented on Oct 5, 2024 Note that this is equivalent to:
tree = compile(source, filename, symbol, ast.PyCF_ONLY_AST)
Which doesn't use codeop.Compile(). nineteendo commented on Oct 5, 2024 Is this acceptable?
diff --git a/Lib/_pyrepl/simple_interact.py b/Lib/_pyrepl/simple_interact.py
index d65b6d0d627..6e24860d3c8 100644
--- a/Lib/_pyrepl/simple_interact.py
+++ b/Lib/_pyrepl/simple_interact.py
@@ -83,7 +83,7 @@ def showtraceback(self):
def runsource(self, source, filename="<input>", symbol="single"):
try:
- tree = ast.parse(source)
+ tree = self.compile.compiler(source, filename, symbol, ast.PyCF_ONLY_AST)
except (OverflowError, SyntaxError, ValueError):
self.showsyntaxerror(filename)
return False
diff --git a/Lib/codeop.py b/Lib/codeop.py
index 6ad60e7f850..8a77075b487 100644
--- a/Lib/codeop.py
+++ b/Lib/codeop.py
@@ -44,6 +44,7 @@
# Caveat emptor: These flags are undocumented on purpose and depending
# on their effect outside the standard library is **unsupported**.
PyCF_DONT_IMPLY_DEDENT = 0x200
+PyCF_ONLY_AST = 0x400
PyCF_ALLOW_INCOMPLETE_INPUT = 0x4000
def _maybe_compile(compiler, source, filename, symbol):
@@ -109,11 +110,13 @@ class Compile:
def __init__(self):
self.flags = PyCF_DONT_IMPLY_DEDENT | PyCF_ALLOW_INCOMPLETE_INPUT
- def __call__(self, source, filename, symbol, **kwargs):
- flags = self.flags
+ def __call__(self, source, filename, symbol, flags=0, **kwargs):
+ flags |= self.flags
if kwargs.get('incomplete_input', True) is False:
flags &= ~PyCF_DONT_IMPLY_DEDENT
flags &= ~PyCF_ALLOW_INCOMPLETE_INPUT
+ if flags & PyCF_ONLY_AST:
+ return compile(source, filename, symbol, flags, True)
codeob = compile(source, filename, symbol, flags, True)
for feature in _features:
if codeob.co_flags & feature.compiler_flag:pablogsal commented on Oct 6, 2024
Clearly this is a showstopper bug requiring @Yhg1s to delay Python 3.13.0 for another week and another RC! No respect for the FLUFL eh @pablogsal ??? 😭

Reacted by sobolevn, Mikhail Efimov, Amin Abbasov and denballakh nineteendo commented on Oct 9, 2024 There's no specific code in the PR to handle this easter egg, so I think the bug applies to all syntax changing futures. It just so happens this is currently the only future that changes syntax. If it did not exist, it might have been very tedious to figure this out when adding one in the future.
Edit: but it's worth noting that old futures changed the parser and not compiler. warsaw commented on Oct 9, 2024 barry_as_FLUFL FTW... again! 🤣
Reacted by Nice Zombies, Hugo van Kemenade and Amin Abbasov JelleZijlstra commented on Oct 11, 2024 @nineteendo's code looks reasonable to me; please submit a PR!
Note that support in the old REPL was also somewhat broken (this is #125331):
% python3.12
Python 3.12.4 (main, Jul 24 2024, 15:24:11) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import barry_as_FLUFL; print(1 <> 2)
File "<stdin>", line 1
from __future__ import barry_as_FLUFL; print(1 <> 2)
^^
SyntaxError: invalid syntax
>>> from __future__ import barry_as_FLUFL
>>> print(1 <> 2)
True
>>> nineteendo commented on Oct 11, 2024
please submit a PR!
Wulian233 already updated his PR with my patch: #124999. added a commit that references this issue on Oct 14, 2024gh-124960: Fixed `barry_as_FLUFL` future flag does not work in new RE… ambv commented on Oct 14, 2024 The immediate fix is landed. Keeping this open because of the long-standing bug preventing the future import to work when parsed in one pass with its usage. nineteendo commented on Oct 14, 2024 Jelle has already opened a separate issue for that: #125331, so I would close this one. ambv commented on Oct 14, 2024 Alright, let's do that then. Thanks!
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|