mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									49aafc9f2c
								
							
						
					
					
						commit
						aa2321b0f8
					
				
					 2 changed files with 15 additions and 3 deletions
				
			
		| 
						 | 
					@ -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,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	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,
 | 
				
			||||||
			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,
 | 
				
			||||||
			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,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue