From ff83c2bacc2acd782d20b589a02420df571b89a2 Mon Sep 17 00:00:00 2001 From: Hye-Shik Chang Date: Mon, 2 Feb 2004 13:39:01 +0000 Subject: Fix input() builtin function to respect compiler flags. (SF patch 876178, patch by mwh, unittest by perky) --- Lib/test/test_builtin.py | 13 +++++++++++++ Misc/NEWS | 3 +++ Python/bltinmodule.c | 5 ++++- 3 files changed, 20 insertions(+), 1 deletion(-) 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; } -- cgit v0.12