Fix for bug [#452230] future division isn't propagated.
builtin_eval wasn't merging in the compiler flags from the current frame;
I suppose we never noticed this before because future division is the
first future-feature that can affect expressions (nested_scopes and
generators had only statement-level effects).
diff --git a/Lib/test/test_binop.py b/Lib/test/test_binop.py
index fc7ed94..2ca84f4 100644
--- a/Lib/test/test_binop.py
+++ b/Lib/test/test_binop.py
@@ -335,6 +335,7 @@
 self.assertEqual(2 / Rat(5), Rat(2, 5))
 self.assertEqual(3.0 * Rat(1, 2), 1.5)
 self.assertEqual(Rat(1, 2) * 3.0, 1.5)
+self.assertEqual(eval('1/2'), 0.5)
 """
 
 test_support.run_unittest(RatTestCase)
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 9a179a1..9a6f5e4 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -523,6 +523,7 @@
 	PyObject *cmd;
 	PyObject *globals = Py_None, *locals = Py_None;
 	char *str;
+	PyCompilerFlags cf;
 
 	if (!PyArg_ParseTuple(args, "O|O!O!:eval",
 			&cmd,
@@ -536,11 +537,13 @@
 	}
 	else if (locals == Py_None)
 		locals = globals;
+
 	if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
 		if (PyDict_SetItemString(globals, "__builtins__",
 					 PyEval_GetBuiltins()) != 0)
 			return NULL;
 	}
+
 	if (PyCode_Check(cmd)) {
 		if (PyTuple_GET_SIZE(((PyCodeObject *)cmd)->co_freevars) > 0) {
 			PyErr_SetString(PyExc_TypeError,
@@ -549,6 +552,7 @@
 		}
 		return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
 	}
+
 	if (!PyString_Check(cmd) &&
 	    !PyUnicode_Check(cmd)) {
 		PyErr_SetString(PyExc_TypeError,
@@ -559,7 +563,10 @@
 		return NULL;
 	while (*str == ' ' || *str == '\t')
 		str++;
-	return PyRun_String(str, Py_eval_input, globals, locals);
+
+	cf.cf_flags = 0;
+	(void)PyEval_MergeCompilerFlags(&cf);
+	return PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
 }
 
 static char eval_doc[] =