mirror of
https://github.com/python/cpython.git
synced 2025-07-29 06:05:00 +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