Issue #19512, #19515: remove shared identifiers, move identifiers where they

are used.

Move also _Py_IDENTIFIER() defintions to the top in modified files to remove
identifiers duplicated in the same file.
This commit is contained in:
Victor Stinner 2013-11-07 23:07:29 +01:00
parent 07e9e380f9
commit bd303c165b
17 changed files with 93 additions and 89 deletions

View file

@ -147,14 +147,6 @@ typedef struct _Py_Identifier {
#define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value) #define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value)
#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname) #define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname)
/* Common identifiers (ex: _PyId_path is the string "path") */
PyAPI_DATA(_Py_Identifier) _PyId_argv;
PyAPI_DATA(_Py_Identifier) _PyId_builtins;
PyAPI_DATA(_Py_Identifier) _PyId_path;
PyAPI_DATA(_Py_Identifier) _PyId_stdin;
PyAPI_DATA(_Py_Identifier) _PyId_stdout;
PyAPI_DATA(_Py_Identifier) _PyId_stderr;
/* /*
Type objects contain a string containing the type name (to help somewhat Type objects contain a string containing the type name (to help somewhat
in debugging), the allocation parameters (see PyObject_New() and in debugging), the allocation parameters (see PyObject_New() and

View file

@ -80,7 +80,7 @@ static void
PrintError(char *msg, ...) PrintError(char *msg, ...)
{ {
char buf[512]; char buf[512];
PyObject *f = _PySys_GetObjectId(&_PyId_stderr); PyObject *f = PySys_GetObject("stderr");
va_list marker; va_list marker;
va_start(marker, msg); va_start(marker, msg);

View file

@ -2578,7 +2578,7 @@ PyCurses_setupterm(PyObject* self, PyObject *args, PyObject* keywds)
if (fd == -1) { if (fd == -1) {
PyObject* sys_stdout; PyObject* sys_stdout;
sys_stdout = _PySys_GetObjectId(&_PyId_stdout); sys_stdout = PySys_GetObject("stdout");
if (sys_stdout == NULL || sys_stdout == Py_None) { if (sys_stdout == NULL || sys_stdout == Py_None) {
PyErr_SetString( PyErr_SetString(

View file

@ -185,7 +185,7 @@ normalizeUserObj(PyObject *obj)
} }
} }
if (modname != NULL) { if (modname != NULL) {
if (_PyUnicode_CompareWithId(modname, &_PyId_builtins) != 0) { if (PyUnicode_CompareWithASCIIString(modname, "builtins") != 0) {
PyObject *result; PyObject *result;
result = PyUnicode_FromFormat("<%U.%s>", modname, result = PyUnicode_FromFormat("<%U.%s>", modname,
fn->m_ml->ml_name); fn->m_ml->ml_name);

View file

@ -17,6 +17,8 @@ static PyObject *ThreadError;
static long nb_threads = 0; static long nb_threads = 0;
static PyObject *str_dict; static PyObject *str_dict;
_Py_IDENTIFIER(stderr);
/* Lock objects */ /* Lock objects */
typedef struct { typedef struct {
@ -1005,7 +1007,7 @@ t_bootstrap(void *boot_raw)
PySys_WriteStderr( PySys_WriteStderr(
"Unhandled exception in thread started by "); "Unhandled exception in thread started by ");
PyErr_Fetch(&exc, &value, &tb); PyErr_Fetch(&exc, &value, &tb);
file = _PySys_GetObjectId(&_PyId_stderr); file = _PySys_GetObjectId(&PyId_stderr);
if (file != NULL && file != Py_None) if (file != NULL && file != Py_None)
PyFile_WriteObject(boot->func, file, 0); PyFile_WriteObject(boot->func, file, 0);
else else

View file

@ -26,6 +26,11 @@
(anyway, the length is smaller than 30 characters) */ (anyway, the length is smaller than 30 characters) */
#define PUTS(fd, str) write(fd, str, (int)strlen(str)) #define PUTS(fd, str) write(fd, str, (int)strlen(str))
_Py_IDENTIFIER(enable);
_Py_IDENTIFIER(fileno);
_Py_IDENTIFIER(flush);
_Py_IDENTIFIER(stderr);
#ifdef HAVE_SIGACTION #ifdef HAVE_SIGACTION
typedef struct sigaction _Py_sighandler_t; typedef struct sigaction _Py_sighandler_t;
#else #else
@ -130,13 +135,11 @@ static PyObject*
faulthandler_get_fileno(PyObject *file, int *p_fd) faulthandler_get_fileno(PyObject *file, int *p_fd)
{ {
PyObject *result; PyObject *result;
_Py_IDENTIFIER(fileno);
_Py_IDENTIFIER(flush);
long fd_long; long fd_long;
int fd; int fd;
if (file == NULL || file == Py_None) { if (file == NULL || file == Py_None) {
file = _PySys_GetObjectId(&_PyId_stderr); file = _PySys_GetObjectId(&PyId_stderr);
if (file == NULL) { if (file == NULL) {
PyErr_SetString(PyExc_RuntimeError, "unable to get sys.stderr"); PyErr_SetString(PyExc_RuntimeError, "unable to get sys.stderr");
return NULL; return NULL;
@ -1047,7 +1050,6 @@ static int
faulthandler_env_options(void) faulthandler_env_options(void)
{ {
PyObject *xoptions, *key, *module, *res; PyObject *xoptions, *key, *module, *res;
_Py_IDENTIFIER(enable);
char *p; char *p;
if (!((p = Py_GETENV("PYTHONFAULTHANDLER")) && *p != '\0')) { if (!((p = Py_GETENV("PYTHONFAULTHANDLER")) && *p != '\0')) {

View file

@ -261,7 +261,7 @@ RunMainFromImporter(wchar_t *filename)
/* argv0 is usable as an import source, so put it in sys.path[0] /* argv0 is usable as an import source, so put it in sys.path[0]
and import __main__ */ and import __main__ */
sys_path = _PySys_GetObjectId(&_PyId_path); sys_path = PySys_GetObject("path");
if (sys_path == NULL) { if (sys_path == NULL) {
PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path"); PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path");
goto error; goto error;

View file

@ -71,7 +71,7 @@ syslog_get_argv(void)
Py_ssize_t argv_len, scriptlen; Py_ssize_t argv_len, scriptlen;
PyObject *scriptobj; PyObject *scriptobj;
Py_ssize_t slash; Py_ssize_t slash;
PyObject *argv = _PySys_GetObjectId(&_PyId_argv); PyObject *argv = PySys_GetObject("argv");
if (argv == NULL) { if (argv == NULL) {
return(NULL); return(NULL);

View file

@ -8,6 +8,12 @@
extern "C" { extern "C" {
#endif #endif
_Py_IDENTIFIER(Py_Repr);
_Py_IDENTIFIER(__bytes__);
_Py_IDENTIFIER(__dir__);
_Py_IDENTIFIER(__isabstractmethod__);
_Py_IDENTIFIER(builtins);
#ifdef Py_REF_DEBUG #ifdef Py_REF_DEBUG
Py_ssize_t _Py_RefTotal; Py_ssize_t _Py_RefTotal;
@ -560,7 +566,6 @@ PyObject *
PyObject_Bytes(PyObject *v) PyObject_Bytes(PyObject *v)
{ {
PyObject *result, *func; PyObject *result, *func;
_Py_IDENTIFIER(__bytes__);
if (v == NULL) if (v == NULL)
return PyBytes_FromString("<NULL>"); return PyBytes_FromString("<NULL>");
@ -949,7 +954,6 @@ _PyObject_IsAbstract(PyObject *obj)
{ {
int res; int res;
PyObject* isabstract; PyObject* isabstract;
_Py_IDENTIFIER(__isabstractmethod__);
if (obj == NULL) if (obj == NULL)
return 0; return 0;
@ -1124,7 +1128,7 @@ _PyObject_GetBuiltin(const char *name)
{ {
PyObject *mod_name, *mod, *attr; PyObject *mod_name, *mod, *attr;
mod_name = _PyUnicode_FromId(&_PyId_builtins); /* borrowed */ mod_name = _PyUnicode_FromId(&PyId_builtins); /* borrowed */
if (mod_name == NULL) if (mod_name == NULL)
return NULL; return NULL;
mod = PyImport_Import(mod_name); mod = PyImport_Import(mod_name);
@ -1440,7 +1444,6 @@ static PyObject *
_dir_object(PyObject *obj) _dir_object(PyObject *obj)
{ {
PyObject *result, *sorted; PyObject *result, *sorted;
_Py_IDENTIFIER(__dir__);
PyObject *dirfunc = _PyObject_LookupSpecial(obj, &PyId___dir__); PyObject *dirfunc = _PyObject_LookupSpecial(obj, &PyId___dir__);
assert(obj); assert(obj);
@ -1973,8 +1976,6 @@ _PyObject_DebugTypeStats(FILE *out)
See dictobject.c and listobject.c for examples of use. See dictobject.c and listobject.c for examples of use.
*/ */
_Py_IDENTIFIER(Py_Repr);
int int
Py_ReprEnter(PyObject *obj) Py_ReprEnter(PyObject *obj)
{ {

View file

@ -53,6 +53,7 @@ _Py_IDENTIFIER(__module__);
_Py_IDENTIFIER(__name__); _Py_IDENTIFIER(__name__);
_Py_IDENTIFIER(__new__); _Py_IDENTIFIER(__new__);
_Py_IDENTIFIER(__setitem__); _Py_IDENTIFIER(__setitem__);
_Py_IDENTIFIER(builtins);
static PyObject * static PyObject *
slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds); slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
@ -366,7 +367,7 @@ type_module(PyTypeObject *type, void *context)
if (s != NULL) if (s != NULL)
return PyUnicode_FromStringAndSize( return PyUnicode_FromStringAndSize(
type->tp_name, (Py_ssize_t)(s - type->tp_name)); type->tp_name, (Py_ssize_t)(s - type->tp_name));
name = _PyUnicode_FromId(&_PyId_builtins); name = _PyUnicode_FromId(&PyId_builtins);
Py_XINCREF(name); Py_XINCREF(name);
return name; return name;
} }
@ -718,7 +719,7 @@ type_repr(PyTypeObject *type)
return NULL; return NULL;
} }
if (mod != NULL && _PyUnicode_CompareWithId(mod, &_PyId_builtins)) if (mod != NULL && _PyUnicode_CompareWithId(mod, &PyId_builtins))
rtn = PyUnicode_FromFormat("<class '%U.%U'>", mod, name); rtn = PyUnicode_FromFormat("<class '%U.%U'>", mod, name);
else else
rtn = PyUnicode_FromFormat("<class '%s'>", type->tp_name); rtn = PyUnicode_FromFormat("<class '%s'>", type->tp_name);
@ -3189,7 +3190,7 @@ object_repr(PyObject *self)
Py_XDECREF(mod); Py_XDECREF(mod);
return NULL; return NULL;
} }
if (mod != NULL && _PyUnicode_CompareWithId(mod, &_PyId_builtins)) if (mod != NULL && _PyUnicode_CompareWithId(mod, &PyId_builtins))
rtn = PyUnicode_FromFormat("<%U.%U object at %p>", mod, name, self); rtn = PyUnicode_FromFormat("<%U.%U object at %p>", mod, name, self);
else else
rtn = PyUnicode_FromFormat("<%s object at %p>", rtn = PyUnicode_FromFormat("<%s object at %p>",

View file

@ -13,6 +13,8 @@ static PyObject *_filters; /* List */
static PyObject *_once_registry; /* Dict */ static PyObject *_once_registry; /* Dict */
static PyObject *_default_action; /* String */ static PyObject *_default_action; /* String */
_Py_IDENTIFIER(argv);
_Py_IDENTIFIER(stderr);
static int static int
check_matched(PyObject *obj, PyObject *arg) check_matched(PyObject *obj, PyObject *arg)
@ -265,7 +267,7 @@ show_warning(PyObject *filename, int lineno, PyObject *text, PyObject
if (name == NULL) /* XXX Can an object lack a '__name__' attribute? */ if (name == NULL) /* XXX Can an object lack a '__name__' attribute? */
goto error; goto error;
f_stderr = _PySys_GetObjectId(&_PyId_stderr); f_stderr = _PySys_GetObjectId(&PyId_stderr);
if (f_stderr == NULL) { if (f_stderr == NULL) {
fprintf(stderr, "lost sys.stderr\n"); fprintf(stderr, "lost sys.stderr\n");
goto error; goto error;
@ -562,7 +564,7 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno,
else { else {
*filename = NULL; *filename = NULL;
if (*module != Py_None && PyUnicode_CompareWithASCIIString(*module, "__main__") == 0) { if (*module != Py_None && PyUnicode_CompareWithASCIIString(*module, "__main__") == 0) {
PyObject *argv = _PySys_GetObjectId(&_PyId_argv); PyObject *argv = _PySys_GetObjectId(&PyId_argv);
/* PyList_Check() is needed because sys.argv is set to None during /* PyList_Check() is needed because sys.argv is set to None during
Python finalization */ Python finalization */
if (argv != NULL && PyList_Check(argv) && PyList_Size(argv) > 0) { if (argv != NULL && PyList_Check(argv) && PyList_Size(argv) > 0) {

View file

@ -32,9 +32,19 @@ const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
int Py_HasFileSystemDefaultEncoding = 0; int Py_HasFileSystemDefaultEncoding = 0;
#endif #endif
_Py_IDENTIFIER(__builtins__);
_Py_IDENTIFIER(__dict__);
_Py_IDENTIFIER(__prepare__);
_Py_IDENTIFIER(__round__);
_Py_IDENTIFIER(encoding);
_Py_IDENTIFIER(errors);
_Py_IDENTIFIER(fileno); _Py_IDENTIFIER(fileno);
_Py_IDENTIFIER(flush); _Py_IDENTIFIER(flush);
_Py_IDENTIFIER(__builtins__); _Py_IDENTIFIER(metaclass);
_Py_IDENTIFIER(sort);
_Py_IDENTIFIER(stdin);
_Py_IDENTIFIER(stdout);
_Py_IDENTIFIER(stderr);
static PyObject * static PyObject *
builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
@ -43,8 +53,6 @@ builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
PyObject *cls = NULL; PyObject *cls = NULL;
Py_ssize_t nargs; Py_ssize_t nargs;
int isclass; int isclass;
_Py_IDENTIFIER(__prepare__);
_Py_IDENTIFIER(metaclass);
assert(args != NULL); assert(args != NULL);
if (!PyTuple_Check(args)) { if (!PyTuple_Check(args)) {
@ -1547,7 +1555,6 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
static PyObject *dummy_args; static PyObject *dummy_args;
PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL; PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
int i, err; int i, err;
_Py_IDENTIFIER(flush);
if (dummy_args == NULL && !(dummy_args = PyTuple_New(0))) if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
return NULL; return NULL;
@ -1555,7 +1562,7 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
kwlist, &sep, &end, &file, &flush)) kwlist, &sep, &end, &file, &flush))
return NULL; return NULL;
if (file == NULL || file == Py_None) { if (file == NULL || file == Py_None) {
file = _PySys_GetObjectId(&_PyId_stdout); file = _PySys_GetObjectId(&PyId_stdout);
if (file == NULL) { if (file == NULL) {
PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
return NULL; return NULL;
@ -1640,9 +1647,9 @@ static PyObject *
builtin_input(PyObject *self, PyObject *args) builtin_input(PyObject *self, PyObject *args)
{ {
PyObject *promptarg = NULL; PyObject *promptarg = NULL;
PyObject *fin = _PySys_GetObjectId(&_PyId_stdin); PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
PyObject *fout = _PySys_GetObjectId(&_PyId_stdout); PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
PyObject *ferr = _PySys_GetObjectId(&_PyId_stderr); PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
PyObject *tmp; PyObject *tmp;
long fd; long fd;
int tty; int tty;
@ -1713,8 +1720,6 @@ builtin_input(PyObject *self, PyObject *args)
char *stdin_encoding_str, *stdin_errors_str; char *stdin_encoding_str, *stdin_errors_str;
PyObject *result; PyObject *result;
size_t len; size_t len;
_Py_IDENTIFIER(encoding);
_Py_IDENTIFIER(errors);
stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding); stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors); stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
@ -1843,7 +1848,6 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
PyObject *ndigits = NULL; PyObject *ndigits = NULL;
static char *kwlist[] = {"number", "ndigits", 0}; static char *kwlist[] = {"number", "ndigits", 0};
PyObject *number, *round, *result; PyObject *number, *round, *result;
_Py_IDENTIFIER(__round__);
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round", if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
kwlist, &number, &ndigits)) kwlist, &number, &ndigits))
@ -1886,7 +1890,6 @@ builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
PyObject *callable; PyObject *callable;
static char *kwlist[] = {"iterable", "key", "reverse", 0}; static char *kwlist[] = {"iterable", "key", "reverse", 0};
int reverse; int reverse;
_Py_IDENTIFIER(sort);
/* args 1-3 should match listsort in Objects/listobject.c */ /* args 1-3 should match listsort in Objects/listobject.c */
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted", if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
@ -1939,7 +1942,6 @@ builtin_vars(PyObject *self, PyObject *args)
Py_INCREF(d); Py_INCREF(d);
} }
else { else {
_Py_IDENTIFIER(__dict__);
d = _PyObject_GetAttrId(v, &PyId___dict__); d = _PyObject_GetAttrId(v, &PyId___dict__);
if (d == NULL) { if (d == NULL) {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,

View file

@ -20,6 +20,9 @@ extern char *strerror(int);
extern "C" { extern "C" {
#endif #endif
_Py_IDENTIFIER(builtins);
_Py_IDENTIFIER(stderr);
void void
PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback) PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback)
@ -844,7 +847,7 @@ PyErr_WriteUnraisable(PyObject *obj)
PyErr_Fetch(&t, &v, &tb); PyErr_Fetch(&t, &v, &tb);
f = _PySys_GetObjectId(&_PyId_stderr); f = _PySys_GetObjectId(&PyId_stderr);
if (f == NULL || f == Py_None) if (f == NULL || f == Py_None)
goto done; goto done;
@ -878,7 +881,7 @@ PyErr_WriteUnraisable(PyObject *obj)
goto done; goto done;
} }
else { else {
if (_PyUnicode_CompareWithId(moduleName, &_PyId_builtins) != 0) { if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0) {
if (PyFile_WriteObject(moduleName, f, Py_PRINT_RAW) < 0) if (PyFile_WriteObject(moduleName, f, Py_PRINT_RAW) < 0)
goto done; goto done;
if (PyFile_WriteString(".", f) < 0) if (PyFile_WriteString(".", f) < 0)

View file

@ -310,7 +310,7 @@ PyImport_Cleanup(void)
/* XXX Perhaps these precautions are obsolete. Who knows? */ /* XXX Perhaps these precautions are obsolete. Who knows? */
value = _PyDict_GetItemId(modules, &_PyId_builtins); value = PyDict_GetItemString(modules, "builtins");
if (value != NULL && PyModule_Check(value)) { if (value != NULL && PyModule_Check(value)) {
dict = PyModule_GetDict(value); dict = PyModule_GetDict(value);
if (Py_VerboseFlag) if (Py_VerboseFlag)

View file

@ -35,21 +35,16 @@
#define PATH_MAX MAXPATHLEN #define PATH_MAX MAXPATHLEN
#endif #endif
/* Common identifiers */ _Py_IDENTIFIER(builtins);
_Py_Identifier _PyId_argv = _Py_static_string_init("argv");
_Py_Identifier _PyId_builtins = _Py_static_string_init("builtins");
_Py_Identifier _PyId_path = _Py_static_string_init("path");
_Py_Identifier _PyId_stdin = _Py_static_string_init("stdin");
_Py_Identifier _PyId_stdout = _Py_static_string_init("stdout");
_Py_Identifier _PyId_stderr = _Py_static_string_init("stderr");
/* local identifiers */
_Py_IDENTIFIER(excepthook); _Py_IDENTIFIER(excepthook);
_Py_IDENTIFIER(ps1); _Py_IDENTIFIER(last_traceback);
_Py_IDENTIFIER(ps2);
_Py_IDENTIFIER(last_type); _Py_IDENTIFIER(last_type);
_Py_IDENTIFIER(last_value); _Py_IDENTIFIER(last_value);
_Py_IDENTIFIER(last_traceback); _Py_IDENTIFIER(ps1);
_Py_IDENTIFIER(ps2);
_Py_IDENTIFIER(stdin);
_Py_IDENTIFIER(stdout);
_Py_IDENTIFIER(stderr);
_Py_static_string(PyId_string, "<string>"); _Py_static_string(PyId_string, "<string>");
#ifdef Py_REF_DEBUG #ifdef Py_REF_DEBUG
@ -429,7 +424,7 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib)
pstderr = PyFile_NewStdPrinter(fileno(stderr)); pstderr = PyFile_NewStdPrinter(fileno(stderr));
if (pstderr == NULL) if (pstderr == NULL)
Py_FatalError("Py_Initialize: can't set preliminary stderr"); Py_FatalError("Py_Initialize: can't set preliminary stderr");
_PySys_SetObjectId(&_PyId_stderr, pstderr); _PySys_SetObjectId(&PyId_stderr, pstderr);
PySys_SetObject("__stderr__", pstderr); PySys_SetObject("__stderr__", pstderr);
Py_DECREF(pstderr); Py_DECREF(pstderr);
@ -514,8 +509,8 @@ file_is_closed(PyObject *fobj)
static void static void
flush_std_files(void) flush_std_files(void)
{ {
PyObject *fout = _PySys_GetObjectId(&_PyId_stdout); PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
PyObject *ferr = _PySys_GetObjectId(&_PyId_stderr); PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
PyObject *tmp; PyObject *tmp;
_Py_IDENTIFIER(flush); _Py_IDENTIFIER(flush);
@ -793,7 +788,7 @@ Py_NewInterpreter(void)
pstderr = PyFile_NewStdPrinter(fileno(stderr)); pstderr = PyFile_NewStdPrinter(fileno(stderr));
if (pstderr == NULL) if (pstderr == NULL)
Py_FatalError("Py_Initialize: can't set preliminary stderr"); Py_FatalError("Py_Initialize: can't set preliminary stderr");
_PySys_SetObjectId(&_PyId_stderr, pstderr); _PySys_SetObjectId(&PyId_stderr, pstderr);
PySys_SetObject("__stderr__", pstderr); PySys_SetObject("__stderr__", pstderr);
Py_DECREF(pstderr); Py_DECREF(pstderr);
@ -1187,7 +1182,7 @@ initstdio(void)
goto error; goto error;
} /* if (fd < 0) */ } /* if (fd < 0) */
PySys_SetObject("__stdin__", std); PySys_SetObject("__stdin__", std);
_PySys_SetObjectId(&_PyId_stdin, std); _PySys_SetObjectId(&PyId_stdin, std);
Py_DECREF(std); Py_DECREF(std);
/* Set sys.stdout */ /* Set sys.stdout */
@ -1202,7 +1197,7 @@ initstdio(void)
goto error; goto error;
} /* if (fd < 0) */ } /* if (fd < 0) */
PySys_SetObject("__stdout__", std); PySys_SetObject("__stdout__", std);
_PySys_SetObjectId(&_PyId_stdout, std); _PySys_SetObjectId(&PyId_stdout, std);
Py_DECREF(std); Py_DECREF(std);
#if 1 /* Disable this if you have trouble debugging bootstrap stuff */ #if 1 /* Disable this if you have trouble debugging bootstrap stuff */
@ -1236,7 +1231,7 @@ initstdio(void)
Py_DECREF(std); Py_DECREF(std);
goto error; goto error;
} }
if (_PySys_SetObjectId(&_PyId_stderr, std) < 0) { if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
Py_DECREF(std); Py_DECREF(std);
goto error; goto error;
} }
@ -1368,7 +1363,7 @@ PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags)
if (fp == stdin) { if (fp == stdin) {
/* Fetch encoding from sys.stdin if possible. */ /* Fetch encoding from sys.stdin if possible. */
v = _PySys_GetObjectId(&_PyId_stdin); v = _PySys_GetObjectId(&PyId_stdin);
if (v && v != Py_None) { if (v && v != Py_None) {
oenc = _PyObject_GetAttrId(v, &PyId_encoding); oenc = _PyObject_GetAttrId(v, &PyId_encoding);
if (oenc) if (oenc)
@ -1774,7 +1769,7 @@ handle_system_exit(void)
if (PyLong_Check(value)) if (PyLong_Check(value))
exitcode = (int)PyLong_AsLong(value); exitcode = (int)PyLong_AsLong(value);
else { else {
PyObject *sys_stderr = _PySys_GetObjectId(&_PyId_stderr); PyObject *sys_stderr = _PySys_GetObjectId(&PyId_stderr);
if (sys_stderr != NULL && sys_stderr != Py_None) { if (sys_stderr != NULL && sys_stderr != Py_None) {
PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW); PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
} else { } else {
@ -1938,7 +1933,7 @@ print_exception(PyObject *f, PyObject *value)
err = PyFile_WriteString("<unknown>", f); err = PyFile_WriteString("<unknown>", f);
} }
else { else {
if (_PyUnicode_CompareWithId(moduleName, &_PyId_builtins) != 0) if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0)
{ {
err = PyFile_WriteObject(moduleName, f, Py_PRINT_RAW); err = PyFile_WriteObject(moduleName, f, Py_PRINT_RAW);
err += PyFile_WriteString(".", f); err += PyFile_WriteString(".", f);
@ -2033,7 +2028,7 @@ void
PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
{ {
PyObject *seen; PyObject *seen;
PyObject *f = _PySys_GetObjectId(&_PyId_stderr); PyObject *f = _PySys_GetObjectId(&PyId_stderr);
if (PyExceptionInstance_Check(value) if (PyExceptionInstance_Check(value)
&& tb != NULL && PyTraceBack_Check(tb)) { && tb != NULL && PyTraceBack_Check(tb)) {
/* Put the traceback on the exception, otherwise it won't get /* Put the traceback on the exception, otherwise it won't get
@ -2130,7 +2125,7 @@ flush_io(void)
/* Save the current exception */ /* Save the current exception */
PyErr_Fetch(&type, &value, &traceback); PyErr_Fetch(&type, &value, &traceback);
f = _PySys_GetObjectId(&_PyId_stderr); f = _PySys_GetObjectId(&PyId_stderr);
if (f != NULL) { if (f != NULL) {
r = _PyObject_CallMethodId(f, &PyId_flush, ""); r = _PyObject_CallMethodId(f, &PyId_flush, "");
if (r) if (r)
@ -2138,7 +2133,7 @@ flush_io(void)
else else
PyErr_Clear(); PyErr_Clear();
} }
f = _PySys_GetObjectId(&_PyId_stdout); f = _PySys_GetObjectId(&PyId_stdout);
if (f != NULL) { if (f != NULL) {
r = _PyObject_CallMethodId(f, &PyId_flush, ""); r = _PyObject_CallMethodId(f, &PyId_flush, "");
if (r) if (r)

View file

@ -41,6 +41,16 @@ extern const char *PyWin_DLLVersionString;
#include <langinfo.h> #include <langinfo.h>
#endif #endif
_Py_IDENTIFIER(_);
_Py_IDENTIFIER(__sizeof__);
_Py_IDENTIFIER(buffer);
_Py_IDENTIFIER(builtins);
_Py_IDENTIFIER(encoding);
_Py_IDENTIFIER(path);
_Py_IDENTIFIER(stdout);
_Py_IDENTIFIER(stderr);
_Py_IDENTIFIER(write);
PyObject * PyObject *
_PySys_GetObjectId(_Py_Identifier *key) _PySys_GetObjectId(_Py_Identifier *key)
{ {
@ -104,8 +114,6 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o)
PyObject *encoded, *escaped_str, *repr_str, *buffer, *result; PyObject *encoded, *escaped_str, *repr_str, *buffer, *result;
char *stdout_encoding_str; char *stdout_encoding_str;
int ret; int ret;
_Py_IDENTIFIER(encoding);
_Py_IDENTIFIER(buffer);
stdout_encoding = _PyObject_GetAttrId(outf, &PyId_encoding); stdout_encoding = _PyObject_GetAttrId(outf, &PyId_encoding);
if (stdout_encoding == NULL) if (stdout_encoding == NULL)
@ -126,7 +134,6 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o)
buffer = _PyObject_GetAttrId(outf, &PyId_buffer); buffer = _PyObject_GetAttrId(outf, &PyId_buffer);
if (buffer) { if (buffer) {
_Py_IDENTIFIER(write);
result = _PyObject_CallMethodId(buffer, &PyId_write, "(O)", encoded); result = _PyObject_CallMethodId(buffer, &PyId_write, "(O)", encoded);
Py_DECREF(buffer); Py_DECREF(buffer);
Py_DECREF(encoded); Py_DECREF(encoded);
@ -165,8 +172,6 @@ sys_displayhook(PyObject *self, PyObject *o)
PyObject *builtins; PyObject *builtins;
static PyObject *newline = NULL; static PyObject *newline = NULL;
int err; int err;
_Py_IDENTIFIER(_);
_Py_IDENTIFIER(builtins);
builtins = _PyDict_GetItemId(modules, &PyId_builtins); builtins = _PyDict_GetItemId(modules, &PyId_builtins);
if (builtins == NULL) { if (builtins == NULL) {
@ -183,7 +188,7 @@ sys_displayhook(PyObject *self, PyObject *o)
} }
if (_PyObject_SetAttrId(builtins, &PyId__, Py_None) != 0) if (_PyObject_SetAttrId(builtins, &PyId__, Py_None) != 0)
return NULL; return NULL;
outf = _PySys_GetObjectId(&_PyId_stdout); outf = _PySys_GetObjectId(&PyId_stdout);
if (outf == NULL || outf == Py_None) { if (outf == NULL || outf == Py_None) {
PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
return NULL; return NULL;
@ -854,7 +859,6 @@ sys_getsizeof(PyObject *self, PyObject *args, PyObject *kwds)
static char *kwlist[] = {"object", "default", 0}; static char *kwlist[] = {"object", "default", 0};
PyObject *o, *dflt = NULL; PyObject *o, *dflt = NULL;
PyObject *method; PyObject *method;
_Py_IDENTIFIER(__sizeof__);
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:getsizeof", if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:getsizeof",
kwlist, &o, &dflt)) kwlist, &o, &dflt))
@ -1825,7 +1829,7 @@ PySys_SetPath(const wchar_t *path)
PyObject *v; PyObject *v;
if ((v = makepathobject(path, DELIM)) == NULL) if ((v = makepathobject(path, DELIM)) == NULL)
Py_FatalError("can't create sys.path"); Py_FatalError("can't create sys.path");
if (_PySys_SetObjectId(&_PyId_path, v) != 0) if (_PySys_SetObjectId(&PyId_path, v) != 0)
Py_FatalError("can't assign sys.path"); Py_FatalError("can't assign sys.path");
Py_DECREF(v); Py_DECREF(v);
} }
@ -1894,7 +1898,7 @@ sys_update_path(int argc, wchar_t **argv)
wchar_t fullpath[MAX_PATH]; wchar_t fullpath[MAX_PATH];
#endif #endif
path = _PySys_GetObjectId(&_PyId_path); path = _PySys_GetObjectId(&PyId_path);
if (path == NULL) if (path == NULL)
return; return;
@ -2004,7 +2008,6 @@ sys_pyfile_write_unicode(PyObject *unicode, PyObject *file)
{ {
PyObject *writer = NULL, *args = NULL, *result = NULL; PyObject *writer = NULL, *args = NULL, *result = NULL;
int err; int err;
_Py_IDENTIFIER(write);
if (file == NULL) if (file == NULL)
return -1; return -1;
@ -2109,7 +2112,7 @@ PySys_WriteStdout(const char *format, ...)
va_list va; va_list va;
va_start(va, format); va_start(va, format);
sys_write(&_PyId_stdout, stdout, format, va); sys_write(&PyId_stdout, stdout, format, va);
va_end(va); va_end(va);
} }
@ -2119,7 +2122,7 @@ PySys_WriteStderr(const char *format, ...)
va_list va; va_list va;
va_start(va, format); va_start(va, format);
sys_write(&_PyId_stderr, stderr, format, va); sys_write(&PyId_stderr, stderr, format, va);
va_end(va); va_end(va);
} }
@ -2151,7 +2154,7 @@ PySys_FormatStdout(const char *format, ...)
va_list va; va_list va;
va_start(va, format); va_start(va, format);
sys_format(&_PyId_stdout, stdout, format, va); sys_format(&PyId_stdout, stdout, format, va);
va_end(va); va_end(va);
} }
@ -2161,6 +2164,6 @@ PySys_FormatStderr(const char *format, ...)
va_list va; va_list va;
va_start(va, format); va_start(va, format);
sys_format(&_PyId_stderr, stderr, format, va); sys_format(&PyId_stderr, stderr, format, va);
va_end(va); va_end(va);
} }

View file

@ -21,6 +21,11 @@
/* Function from Parser/tokenizer.c */ /* Function from Parser/tokenizer.c */
extern char * PyTokenizer_FindEncodingFilename(int, PyObject *); extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
_Py_IDENTIFIER(TextIOWrapper);
_Py_IDENTIFIER(close);
_Py_IDENTIFIER(open);
_Py_IDENTIFIER(path);
static PyObject * static PyObject *
tb_dir(PyTracebackObject *self) tb_dir(PyTracebackObject *self)
{ {
@ -152,7 +157,6 @@ _Py_FindSourceFile(PyObject *filename, char* namebuf, size_t namelen, PyObject *
const char* filepath; const char* filepath;
Py_ssize_t len; Py_ssize_t len;
PyObject* result; PyObject* result;
_Py_IDENTIFIER(open);
filebytes = PyUnicode_EncodeFSDefault(filename); filebytes = PyUnicode_EncodeFSDefault(filename);
if (filebytes == NULL) { if (filebytes == NULL) {
@ -169,7 +173,7 @@ _Py_FindSourceFile(PyObject *filename, char* namebuf, size_t namelen, PyObject *
tail++; tail++;
taillen = strlen(tail); taillen = strlen(tail);
syspath = _PySys_GetObjectId(&_PyId_path); syspath = _PySys_GetObjectId(&PyId_path);
if (syspath == NULL || !PyList_Check(syspath)) if (syspath == NULL || !PyList_Check(syspath))
goto error; goto error;
npath = PyList_Size(syspath); npath = PyList_Size(syspath);
@ -232,9 +236,6 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent)
char buf[MAXPATHLEN+1]; char buf[MAXPATHLEN+1];
int kind; int kind;
void *data; void *data;
_Py_IDENTIFIER(close);
_Py_IDENTIFIER(open);
_Py_IDENTIFIER(TextIOWrapper);
/* open the file */ /* open the file */
if (filename == NULL) if (filename == NULL)