Skip to content

Commit

Permalink
[3.12] gh-105908: fix barry_as_FLUFL future import (GH-105909) (#10…
Browse files Browse the repository at this point in the history
…5930)

(cherry picked from commit 28187a9)

Co-authored-by: Crowthebird <78076854+thatbirdguythatuknownot@users.noreply.github.com>
  • Loading branch information
miss-islington and thatbirdguythatuknownot committed Jun 20, 2023
1 parent 225cc4c commit cc18a8b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 6 deletions.
8 changes: 8 additions & 0 deletions Lib/test/test_future.py
Expand Up @@ -4,6 +4,7 @@
import ast
import unittest
from test.support import import_helper
from test.support.script_helper import spawn_python, kill_python
from textwrap import dedent
import os
import re
Expand Down Expand Up @@ -121,6 +122,13 @@ def test_unicode_literals_exec(self):
exec("from __future__ import unicode_literals; x = ''", {}, scope)
self.assertIsInstance(scope["x"], str)

def test_syntactical_future_repl(self):
p = spawn_python('-i')
p.stdin.write(b"from __future__ import barry_as_FLUFL\n")
p.stdin.write(b"2 <> 3\n")
out = kill_python(p)
self.assertNotIn(b'SyntaxError: invalid syntax', out)

class AnnotationsFutureTestCase(unittest.TestCase):
template = dedent(
"""
Expand Down
@@ -0,0 +1 @@
Fixed bug where :gh:`99111` breaks future import ``barry_as_FLUFL`` in the Python REPL.
16 changes: 10 additions & 6 deletions Python/compile.c
Expand Up @@ -510,8 +510,10 @@ static PyCodeObject *optimize_and_assemble(struct compiler *, int addNone);

static int
compiler_setup(struct compiler *c, mod_ty mod, PyObject *filename,
PyCompilerFlags flags, int optimize, PyArena *arena)
PyCompilerFlags *flags, int optimize, PyArena *arena)
{
PyCompilerFlags local_flags = _PyCompilerFlags_INIT;

c->c_const_cache = PyDict_New();
if (!c->c_const_cache) {
return ERROR;
Expand All @@ -527,10 +529,13 @@ compiler_setup(struct compiler *c, mod_ty mod, PyObject *filename,
if (!_PyFuture_FromAST(mod, filename, &c->c_future)) {
return ERROR;
}
int merged = c->c_future.ff_features | flags.cf_flags;
if (!flags) {
flags = &local_flags;
}
int merged = c->c_future.ff_features | flags->cf_flags;
c->c_future.ff_features = merged;
flags.cf_flags = merged;
c->c_flags = flags;
flags->cf_flags = merged;
c->c_flags = *flags;
c->c_optimize = (optimize == -1) ? _Py_GetConfig()->optimization_level : optimize;
c->c_nestlevel = 0;

Expand All @@ -555,12 +560,11 @@ static struct compiler*
new_compiler(mod_ty mod, PyObject *filename, PyCompilerFlags *pflags,
int optimize, PyArena *arena)
{
PyCompilerFlags flags = pflags ? *pflags : _PyCompilerFlags_INIT;
struct compiler *c = PyMem_Calloc(1, sizeof(struct compiler));
if (c == NULL) {
return NULL;
}
if (compiler_setup(c, mod, filename, flags, optimize, arena) < 0) {
if (compiler_setup(c, mod, filename, pflags, optimize, arena) < 0) {
compiler_free(c);
return NULL;
}
Expand Down

0 comments on commit cc18a8b

Please sign in to comment.