mirror of https://github.com/python/cpython
Fix input() builtin function to respect compiler flags.
(SF patch 876178, patch by mwh, unittest by perky)
This commit is contained in:
parent
96c44658b9
commit
ff83c2bacc
|
@ -931,6 +931,19 @@ class BuiltinTest(unittest.TestCase):
|
||||||
self.assertEqual(input(), 'whitespace')
|
self.assertEqual(input(), 'whitespace')
|
||||||
sys.stdin = cStringIO.StringIO()
|
sys.stdin = cStringIO.StringIO()
|
||||||
self.assertRaises(EOFError, input)
|
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
|
del sys.stdout
|
||||||
self.assertRaises(RuntimeError, input, 'prompt')
|
self.assertRaises(RuntimeError, input, 'prompt')
|
||||||
del sys.stdin
|
del sys.stdin
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.4 alpha 1?
|
||||||
Core and builtins
|
Core and builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- input() builtin function now respects compiler flags such as
|
||||||
|
__future__ statements. SF patch 876178.
|
||||||
|
|
||||||
- Removed PendingDeprecationWarning from apply(). apply() remains
|
- Removed PendingDeprecationWarning from apply(). apply() remains
|
||||||
deprecated, but the nuisance warning will not be issued.
|
deprecated, but the nuisance warning will not be issued.
|
||||||
|
|
||||||
|
|
|
@ -979,6 +979,7 @@ builtin_input(PyObject *self, PyObject *args)
|
||||||
char *str;
|
char *str;
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
PyObject *globals, *locals;
|
PyObject *globals, *locals;
|
||||||
|
PyCompilerFlags cf;
|
||||||
|
|
||||||
line = builtin_raw_input(self, args);
|
line = builtin_raw_input(self, args);
|
||||||
if (line == NULL)
|
if (line == NULL)
|
||||||
|
@ -994,7 +995,9 @@ builtin_input(PyObject *self, PyObject *args)
|
||||||
PyEval_GetBuiltins()) != 0)
|
PyEval_GetBuiltins()) != 0)
|
||||||
return NULL;
|
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);
|
Py_DECREF(line);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue