summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_builtin.py13
-rw-r--r--Misc/NEWS3
-rw-r--r--Python/bltinmodule.c5
3 files changed, 20 insertions, 1 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index db823ff..46f3d68 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -931,6 +931,19 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(input(), 'whitespace')
sys.stdin = cStringIO.StringIO()
self.assertRaises(EOFError, input)
+
+ # SF 876178: make sure input() respect future options.
+ sys.stdin = cStringIO.StringIO('1/2')
+ sys.stdout = cStringIO.StringIO()
+ exec compile('print input()', 'test_builtin_tmp', 'exec')
+ sys.stdin.seek(0, 0)
+ exec compile('from __future__ import division;print input()',
+ 'test_builtin_tmp', 'exec')
+ sys.stdin.seek(0, 0)
+ exec compile('print input()', 'test_builtin_tmp', 'exec')
+ self.assertEqual(sys.stdout.getvalue().splitlines(),
+ ['0', '0.5', '0'])
+
del sys.stdout
self.assertRaises(RuntimeError, input, 'prompt')
del sys.stdin
diff --git a/Misc/NEWS b/Misc/NEWS
index e4332d8..9d2e354 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.4 alpha 1?
Core and builtins
-----------------
+- input() builtin function now respects compiler flags such as
+ __future__ statements. SF patch 876178.
+
- Removed PendingDeprecationWarning from apply(). apply() remains
deprecated, but the nuisance warning will not be issued.
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index a17c6d9..7321b74 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -979,6 +979,7 @@ builtin_input(PyObject *self, PyObject *args)
char *str;
PyObject *res;
PyObject *globals, *locals;
+ PyCompilerFlags cf;
line = builtin_raw_input(self, args);
if (line == NULL)
@@ -994,7 +995,9 @@ builtin_input(PyObject *self, PyObject *args)
PyEval_GetBuiltins()) != 0)
return NULL;
}
- res = PyRun_String(str, Py_eval_input, globals, locals);
+ cf.cf_flags = 0;
+ PyEval_MergeCompilerFlags(&cf);
+ res = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
Py_DECREF(line);
return res;
}