mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	Applied patch #1816: sys.flags patch
This commit is contained in:
		
							parent
							
								
									620fbe6632
								
							
						
					
					
						commit
						f31b69f9db
					
				
					 4 changed files with 149 additions and 5 deletions
				
			
		|  | @ -15,6 +15,7 @@ Data members: | |||
| */ | ||||
| 
 | ||||
| #include "Python.h" | ||||
| #include "structseq.h" | ||||
| #include "code.h" | ||||
| #include "frameobject.h" | ||||
| #include "eval.h" | ||||
|  | @ -1045,6 +1046,90 @@ Py_SubversionShortBranch() | |||
| 	return shortbranch; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| PyDoc_STRVAR(flags__doc__, | ||||
| "sys.flags\n\
 | ||||
| \n\ | ||||
| Flags provided through command line arguments or environment vars."); | ||||
| 
 | ||||
| static PyTypeObject FlagsType; | ||||
| 
 | ||||
| static PyStructSequence_Field flags_fields[] = { | ||||
| 	{"debug",		"-d"}, | ||||
| 	{"py3k_warning",	"-3"}, | ||||
| 	{"division_warning",	"-Q"}, | ||||
| 	{"division_new",	"-Qnew"}, | ||||
| 	{"inspect",		"-i"}, | ||||
| 	{"interactive",		"-i"}, | ||||
| 	{"optimize",		"-O or -OO"}, | ||||
| 	{"dont_write_bytecode",	"-B"}, | ||||
| 	/* {"no_user_site",	"-s"}, */ | ||||
| 	{"no_site",		"-S"}, | ||||
| 	{"ingnore_environment",	"-E"}, | ||||
| 	{"tabcheck",		"-t or -tt"}, | ||||
| 	{"verbose",		"-v"}, | ||||
| #ifdef RISCOS | ||||
| 	{"ricos_wimp",		"???"}, | ||||
| #endif | ||||
| 	/* {"unbuffered",		"-u"}, */ | ||||
| 	{"unicode",		"-U"}, | ||||
| 	/* {"skip_first",		"-x"}, */ | ||||
| 	{0} | ||||
| }; | ||||
| 
 | ||||
| static PyStructSequence_Desc flags_desc = { | ||||
| 	"sys.flags",	/* name */ | ||||
| 	flags__doc__,	/* doc */ | ||||
| 	flags_fields,	/* fields */ | ||||
| #ifdef RISCOS | ||||
| 	14 | ||||
| #else | ||||
| 	13 | ||||
| #endif | ||||
| }; | ||||
| 
 | ||||
| static PyObject* | ||||
| make_flags(void) | ||||
| { | ||||
| 	int pos = 0; | ||||
| 	PyObject *seq; | ||||
| 
 | ||||
| 	seq = PyStructSequence_New(&FlagsType); | ||||
| 	if (seq == NULL) | ||||
| 		return NULL; | ||||
| 
 | ||||
| #define SetFlag(flag) \ | ||||
| 	PyStructSequence_SET_ITEM(seq, pos++, PyInt_FromLong(flag)) | ||||
| 
 | ||||
| 	SetFlag(Py_DebugFlag); | ||||
| 	SetFlag(Py_Py3kWarningFlag); | ||||
| 	SetFlag(Py_DivisionWarningFlag); | ||||
| 	SetFlag(_Py_QnewFlag); | ||||
| 	SetFlag(Py_InspectFlag); | ||||
| 	SetFlag(Py_InteractiveFlag); | ||||
| 	SetFlag(Py_OptimizeFlag); | ||||
| 	SetFlag(Py_DontWriteBytecodeFlag); | ||||
| 	/* SetFlag(Py_NoUserSiteDirectory); */ | ||||
| 	SetFlag(Py_NoSiteFlag); | ||||
| 	SetFlag(Py_IgnoreEnvironmentFlag); | ||||
| 	SetFlag(Py_TabcheckFlag); | ||||
| 	SetFlag(Py_VerboseFlag); | ||||
| #ifdef RISCOS | ||||
| 	SetFlag(Py_RISCOSWimpFlag); | ||||
| #endif | ||||
| 	/* SetFlag(saw_unbuffered_flag); */ | ||||
| 	SetFlag(Py_UnicodeFlag); | ||||
| 	/* SetFlag(skipfirstline); */ | ||||
| #undef SetFlag | ||||
| 
 | ||||
| 	if (PyErr_Occurred()) { | ||||
| 		return NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	Py_INCREF(seq); | ||||
| 	return seq; | ||||
| } | ||||
| 
 | ||||
| PyObject * | ||||
| _PySys_Init(void) | ||||
| { | ||||
|  | @ -1128,9 +1213,9 @@ _PySys_Init(void) | |||
| 	v = Py_BuildValue("(ssz)", "CPython", branch, svn_revision); | ||||
| 	PyDict_SetItemString(sysdict, "subversion", v); | ||||
| 	Py_XDECREF(v); | ||||
|         PyDict_SetItemString(sysdict, "dont_write_bytecode", | ||||
|                              v = PyBool_FromLong(Py_DontWriteBytecodeFlag)); | ||||
|         Py_XDECREF(v); | ||||
| 	PyDict_SetItemString(sysdict, "dont_write_bytecode", | ||||
| 			     v = PyBool_FromLong(Py_DontWriteBytecodeFlag)); | ||||
| 	Py_XDECREF(v); | ||||
| 	/*
 | ||||
| 	 * These release level checks are mutually exclusive and cover | ||||
| 	 * the field, so don't get too fancy with the pre-processor! | ||||
|  | @ -1211,6 +1296,12 @@ _PySys_Init(void) | |||
| 		PyDict_SetItemString(sysdict, "warnoptions", warnoptions); | ||||
| 	} | ||||
| 
 | ||||
| 	PyStructSequence_InitType(&FlagsType, &flags_desc); | ||||
| 	PyDict_SetItemString(sysdict, "flags", make_flags()); | ||||
| 	/* prevent user from creating new instances */ | ||||
| 	FlagsType.tp_init = NULL; | ||||
| 	FlagsType.tp_new = NULL; | ||||
| 
 | ||||
| 	if (PyErr_Occurred()) | ||||
| 		return NULL; | ||||
| 	return m; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Christian Heimes
						Christian Heimes