gh-105908: fix barry_as_FLUFL
future import (#105909)
This commit is contained in:
parent
1858db7cbd
commit
28187a9c4f
@ -4,6 +4,7 @@ import __future__
|
|||||||
import ast
|
import ast
|
||||||
import unittest
|
import unittest
|
||||||
from test.support import import_helper
|
from test.support import import_helper
|
||||||
|
from test.support.script_helper import spawn_python, kill_python
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
@ -121,6 +122,13 @@ class FutureTest(unittest.TestCase):
|
|||||||
exec("from __future__ import unicode_literals; x = ''", {}, scope)
|
exec("from __future__ import unicode_literals; x = ''", {}, scope)
|
||||||
self.assertIsInstance(scope["x"], str)
|
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):
|
class AnnotationsFutureTestCase(unittest.TestCase):
|
||||||
template = dedent(
|
template = dedent(
|
||||||
"""
|
"""
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
Fixed bug where :gh:`99111` breaks future import ``barry_as_FLUFL`` in the Python REPL.
|
@ -494,8 +494,10 @@ static PyCodeObject *optimize_and_assemble(struct compiler *, int addNone);
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
compiler_setup(struct compiler *c, mod_ty mod, PyObject *filename,
|
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();
|
c->c_const_cache = PyDict_New();
|
||||||
if (!c->c_const_cache) {
|
if (!c->c_const_cache) {
|
||||||
return ERROR;
|
return ERROR;
|
||||||
@ -511,10 +513,13 @@ compiler_setup(struct compiler *c, mod_ty mod, PyObject *filename,
|
|||||||
if (!_PyFuture_FromAST(mod, filename, &c->c_future)) {
|
if (!_PyFuture_FromAST(mod, filename, &c->c_future)) {
|
||||||
return ERROR;
|
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;
|
c->c_future.ff_features = merged;
|
||||||
flags.cf_flags = merged;
|
flags->cf_flags = merged;
|
||||||
c->c_flags = flags;
|
c->c_flags = *flags;
|
||||||
c->c_optimize = (optimize == -1) ? _Py_GetConfig()->optimization_level : optimize;
|
c->c_optimize = (optimize == -1) ? _Py_GetConfig()->optimization_level : optimize;
|
||||||
c->c_nestlevel = 0;
|
c->c_nestlevel = 0;
|
||||||
|
|
||||||
@ -535,12 +540,11 @@ static struct compiler*
|
|||||||
new_compiler(mod_ty mod, PyObject *filename, PyCompilerFlags *pflags,
|
new_compiler(mod_ty mod, PyObject *filename, PyCompilerFlags *pflags,
|
||||||
int optimize, PyArena *arena)
|
int optimize, PyArena *arena)
|
||||||
{
|
{
|
||||||
PyCompilerFlags flags = pflags ? *pflags : _PyCompilerFlags_INIT;
|
|
||||||
struct compiler *c = PyMem_Calloc(1, sizeof(struct compiler));
|
struct compiler *c = PyMem_Calloc(1, sizeof(struct compiler));
|
||||||
if (c == NULL) {
|
if (c == NULL) {
|
||||||
return 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);
|
compiler_free(c);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user