diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 7d73395..f7c2820 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -36,12 +36,11 @@
 /* Forward */
 static void initmain(void);
 static void initsite(void);
-static PyObject *run_err_node(node *n, char *filename,
-			      PyObject *globals, PyObject *locals);
-static PyObject *run_node(node *n, char *filename,
-			  PyObject *globals, PyObject *locals);
-static PyObject *run_pyc_file(FILE *fp, char *filename,
-			      PyObject *globals, PyObject *locals);
+static PyObject *run_err_node(node *, char *, PyObject *, PyObject *,
+			      PyCompilerFlags *);
+static PyObject *run_node(node *, char *, PyObject *, PyObject *,
+			  PyCompilerFlags *);
+static PyObject *run_pyc_file(FILE *, char *, PyObject *, PyObject *);
 static void err_input(perrdetail *);
 static void initsigs(void);
 static void call_sys_exitfunc(void);
@@ -56,7 +55,6 @@
 extern void _PyCodecRegistry_Init(void);
 extern void _PyCodecRegistry_Fini(void);
 
-
 int Py_DebugFlag; /* Needed by parser.c */
 int Py_VerboseFlag; /* Needed by import.c */
 int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
@@ -472,6 +470,9 @@
 {
 	PyObject *v;
 	int ret;
+	PyCompilerFlags flags;
+
+	flags.cf_nested_scopes = 0;
 	v = PySys_GetObject("ps1");
 	if (v == NULL) {
 		PySys_SetObject("ps1", v = PyString_FromString(">>> "));
@@ -483,7 +484,7 @@
 		Py_XDECREF(v);
 	}
 	for (;;) {
-		ret = PyRun_InteractiveOne(fp, filename);
+		ret = PyRun_InteractiveOneFlags(fp, filename, &flags);
 #ifdef Py_REF_DEBUG
 		fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
 #endif
@@ -499,6 +500,12 @@
 int
 PyRun_InteractiveOne(FILE *fp, char *filename)
 {
+	return PyRun_InteractiveOneFlags(fp, filename, NULL);
+}
+
+int
+PyRun_InteractiveOneFlags(FILE *fp, char *filename, PyCompilerFlags *flags)
+{
 	PyObject *m, *d, *v, *w;
 	node *n;
 	perrdetail err;
@@ -537,7 +544,7 @@
 	if (m == NULL)
 		return -1;
 	d = PyModule_GetDict(m);
-	v = run_node(n, filename, d, d);
+	v = run_node(n, filename, d, d, flags);
 	if (v == NULL) {
 		PyErr_Print();
 		return -1;
@@ -907,7 +914,7 @@
 PyRun_String(char *str, int start, PyObject *globals, PyObject *locals)
 {
 	return run_err_node(PyParser_SimpleParseString(str, start),
-			    "<string>", globals, locals);
+			    "<string>", globals, locals, NULL);
 }
 
 PyObject *
@@ -924,23 +931,26 @@
 	node *n = PyParser_SimpleParseFile(fp, filename, start);
 	if (closeit)
 		fclose(fp);
-	return run_err_node(n, filename, globals, locals);
+	return run_err_node(n, filename, globals, locals, NULL);
 }
 
 static PyObject *
-run_err_node(node *n, char *filename, PyObject *globals, PyObject *locals)
+run_err_node(node *n, char *filename, PyObject *globals, PyObject *locals,
+	     PyCompilerFlags *flags)
 {
 	if (n == NULL)
 		return  NULL;
-	return run_node(n, filename, globals, locals);
+	return run_node(n, filename, globals, locals, flags);
 }
 
 static PyObject *
-run_node(node *n, char *filename, PyObject *globals, PyObject *locals)
+run_node(node *n, char *filename, PyObject *globals, PyObject *locals,
+	 PyCompilerFlags *flags)
 {
 	PyCodeObject *co;
 	PyObject *v;
-	co = PyNode_Compile(n, filename);
+	/* XXX pass sess->ss_nested_scopes to PyNode_Compile */
+	co = PyNode_CompileFlags(n, filename, flags);
 	PyNode_Free(n);
 	if (co == NULL)
 		return NULL;
