Commit aa2321b0 authored by Georg Brandl's avatar Georg Brandl

Patch #703779: unset __file__ in __main__ after running a file. This

makes the filenames the warning module prints much more sensible when
a PYTHONSTARTUP file is used.
parent 49aafc9f
...@@ -12,6 +12,10 @@ What's New in Python 2.6 alpha 1? ...@@ -12,6 +12,10 @@ What's New in Python 2.6 alpha 1?
Core and builtins Core and builtins
----------------- -----------------
- Patch #703779: unset __file__ in __main__ after running a file. This
makes the filenames the warning module prints much more sensible when
a PYTHONSTARTUP file is used.
- Variant of patch #697613: don't exit the interpreter on a SystemExit - Variant of patch #697613: don't exit the interpreter on a SystemExit
exception if the -i command line option or PYTHONINSPECT environment exception if the -i command line option or PYTHONINSPECT environment
variable is given, but break into the interactive interpreter just like variable is given, but break into the interactive interpreter just like
......
...@@ -849,6 +849,7 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, ...@@ -849,6 +849,7 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
{ {
PyObject *m, *d, *v; PyObject *m, *d, *v;
const char *ext; const char *ext;
int set_file_name = 0, ret;
m = PyImport_AddModule("__main__"); m = PyImport_AddModule("__main__");
if (m == NULL) if (m == NULL)
...@@ -862,6 +863,7 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, ...@@ -862,6 +863,7 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Py_DECREF(f); Py_DECREF(f);
return -1; return -1;
} }
set_file_name = 1;
Py_DECREF(f); Py_DECREF(f);
} }
ext = filename + strlen(filename) - 4; ext = filename + strlen(filename) - 4;
...@@ -871,7 +873,8 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, ...@@ -871,7 +873,8 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
fclose(fp); fclose(fp);
if ((fp = fopen(filename, "rb")) == NULL) { if ((fp = fopen(filename, "rb")) == NULL) {
fprintf(stderr, "python: Can't reopen .pyc file\n"); fprintf(stderr, "python: Can't reopen .pyc file\n");
return -1; ret = -1;
goto done;
} }
/* Turn on optimization if a .pyo file is given */ /* Turn on optimization if a .pyo file is given */
if (strcmp(ext, ".pyo") == 0) if (strcmp(ext, ".pyo") == 0)
...@@ -883,12 +886,17 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, ...@@ -883,12 +886,17 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
} }
if (v == NULL) { if (v == NULL) {
PyErr_Print(); PyErr_Print();
return -1; ret = -1;
goto done;
} }
Py_DECREF(v); Py_DECREF(v);
if (Py_FlushLine()) if (Py_FlushLine())
PyErr_Clear(); PyErr_Clear();
return 0; ret = 0;
done:
if (set_file_name && PyDict_DelItemString(d, "__file__"))
PyErr_Clear();
return ret;
} }
int int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment