[Python-checkins] bpo-39487: Merge duplicated _Py_IDENTIFIER identifiers in C code (GH-18254)

Hai Shi webhook-mailer at python.org
Thu Jan 30 18:20:56 EST 2020


https://github.com/python/cpython/commit/46874c26ee1fc752e2e6930efa1d223b2351edb8
commit: 46874c26ee1fc752e2e6930efa1d223b2351edb8
branch: master
author: Hai Shi <shihai1992 at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-01-30T15:20:25-08:00
summary:

bpo-39487: Merge duplicated _Py_IDENTIFIER identifiers in C code (GH-18254)

Moving repetitive `_Py_IDENTIFIER` instances to a global location helps identify them more easily in regards to sub-interpreter support.

files:
M Objects/bytesobject.c
M Objects/descrobject.c
M Objects/fileobject.c
M Objects/iterobject.c
M Objects/moduleobject.c
M Objects/odictobject.c
M Objects/rangeobject.c
M Objects/typeobject.c
M Python/_warnings.c
M Python/ceval.c
M Python/errors.c
M Python/import.c

diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index f9823f18e8699..5fd92f72a536a 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -25,6 +25,8 @@ Py_ssize_t _Py_null_strings, _Py_one_strings;
 static PyBytesObject *characters[UCHAR_MAX + 1];
 static PyBytesObject *nullstring;
 
+_Py_IDENTIFIER(__bytes__);
+
 /* PyBytesObject_SIZE gives the basic size of a string; any memory allocation
    for a string of length n should request PyBytesObject_SIZE + n bytes.
 
@@ -543,7 +545,6 @@ static PyObject *
 format_obj(PyObject *v, const char **pbuf, Py_ssize_t *plen)
 {
     PyObject *func, *result;
-    _Py_IDENTIFIER(__bytes__);
     /* is it a bytes object? */
     if (PyBytes_Check(v)) {
         *pbuf = PyBytes_AS_STRING(v);
@@ -2485,7 +2486,6 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
     PyObject *func;
     Py_ssize_t size;
     static char *kwlist[] = {"source", "encoding", "errors", 0};
-    _Py_IDENTIFIER(__bytes__);
 
     if (type != &PyBytes_Type)
         return bytes_subtype_new(type, args, kwds);
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index 342b993e09039..b9b16d6d0a37d 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -6,6 +6,8 @@
 #include "pycore_tupleobject.h"
 #include "structmember.h" /* Why is this not included in Python.h? */
 
+_Py_IDENTIFIER(getattr);
+
 /*[clinic input]
 class mappingproxy "mappingproxyobject *" "&PyDictProxy_Type"
 class property "propertyobject *" "&PyProperty_Type"
@@ -571,7 +573,6 @@ descr_get_qualname(PyDescrObject *descr, void *Py_UNUSED(ignored))
 static PyObject *
 descr_reduce(PyDescrObject *descr, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(getattr);
     return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr),
                          PyDescr_TYPE(descr), PyDescr_NAME(descr));
 }
@@ -1240,7 +1241,6 @@ wrapper_repr(wrapperobject *wp)
 static PyObject *
 wrapper_reduce(wrapperobject *wp, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(getattr);
     return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr),
                          wp->self, PyDescr_NAME(wp->descr));
 }
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 3ec5a00f30f6a..527693c80998f 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -25,6 +25,8 @@
 extern "C" {
 #endif
 
+_Py_IDENTIFIER(open);
+
 /* External C interface */
 
 PyObject *
@@ -32,7 +34,6 @@ PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const c
               const char *errors, const char *newline, int closefd)
 {
     PyObject *io, *stream;
-    _Py_IDENTIFIER(open);
 
     /* import _io in case we are being used to open io.py */
     io = PyImport_ImportModule("_io");
@@ -547,7 +548,6 @@ PyObject *
 PyFile_OpenCodeObject(PyObject *path)
 {
     PyObject *iomod, *f = NULL;
-    _Py_IDENTIFIER(open);
 
     if (!PyUnicode_Check(path)) {
         PyErr_Format(PyExc_TypeError, "'path' must be 'str', not '%.200s'",
diff --git a/Objects/iterobject.c b/Objects/iterobject.c
index da89298edc5cf..fe1de7e211c5d 100644
--- a/Objects/iterobject.c
+++ b/Objects/iterobject.c
@@ -11,6 +11,8 @@ typedef struct {
     PyObject *it_seq; /* Set to NULL when iterator is exhausted */
 } seqiterobject;
 
+_Py_IDENTIFIER(iter);
+
 PyObject *
 PySeqIter_New(PyObject *seq)
 {
@@ -104,7 +106,6 @@ PyDoc_STRVAR(length_hint_doc, "Private method returning an estimate of len(list(
 static PyObject *
 iter_reduce(seqiterobject *it, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(iter);
     if (it->it_seq != NULL)
         return Py_BuildValue("N(O)n", _PyEval_GetBuiltinId(&PyId_iter),
                              it->it_seq, it->it_index);
@@ -244,7 +245,6 @@ calliter_iternext(calliterobject *it)
 static PyObject *
 calliter_reduce(calliterobject *it, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(iter);
     if (it->it_callable != NULL && it->it_sentinel != NULL)
         return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_iter),
                              it->it_callable, it->it_sentinel);
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index 912c258401586..49cfd574d5664 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -7,6 +7,10 @@
 
 static Py_ssize_t max_module_number;
 
+_Py_IDENTIFIER(__doc__);
+_Py_IDENTIFIER(__name__);
+_Py_IDENTIFIER(__spec__);
+
 typedef struct {
     PyObject_HEAD
     PyObject *md_dict;
@@ -58,11 +62,8 @@ static int
 module_init_dict(PyModuleObject *mod, PyObject *md_dict,
                  PyObject *name, PyObject *doc)
 {
-    _Py_IDENTIFIER(__name__);
-    _Py_IDENTIFIER(__doc__);
     _Py_IDENTIFIER(__package__);
     _Py_IDENTIFIER(__loader__);
-    _Py_IDENTIFIER(__spec__);
 
     if (md_dict == NULL)
         return -1;
@@ -461,7 +462,6 @@ int
 PyModule_SetDocString(PyObject *m, const char *doc)
 {
     PyObject *v;
-    _Py_IDENTIFIER(__doc__);
 
     v = PyUnicode_FromString(doc);
     if (v == NULL || _PyObject_SetAttrId(m, &PyId___doc__, v) != 0) {
@@ -488,7 +488,6 @@ PyModule_GetDict(PyObject *m)
 PyObject*
 PyModule_GetNameObject(PyObject *m)
 {
-    _Py_IDENTIFIER(__name__);
     PyObject *d;
     PyObject *name;
     if (!PyModule_Check(m)) {
@@ -741,10 +740,8 @@ module_getattro(PyModuleObject *m, PyObject *name)
         if (getattr) {
             return _PyObject_CallOneArg(getattr, name);
         }
-        _Py_IDENTIFIER(__name__);
         mod_name = _PyDict_GetItemId(m->md_dict, &PyId___name__);
         if (mod_name && PyUnicode_Check(mod_name)) {
-            _Py_IDENTIFIER(__spec__);
             Py_INCREF(mod_name);
             PyObject *spec = _PyDict_GetItemId(m->md_dict, &PyId___spec__);
             Py_XINCREF(spec);
diff --git a/Objects/odictobject.c b/Objects/odictobject.c
index dfbd30a976caf..45e089be2871e 100644
--- a/Objects/odictobject.c
+++ b/Objects/odictobject.c
@@ -526,6 +526,8 @@ struct _odictnode {
 #define _odict_FOREACH(od, node) \
     for (node = _odict_FIRST(od); node != NULL; node = _odictnode_NEXT(node))
 
+_Py_IDENTIFIER(items);
+
 /* Return the index into the hash table, regardless of a valid node. */
 static Py_ssize_t
 _odict_get_index_raw(PyODictObject *od, PyObject *key, Py_hash_t hash)
@@ -896,7 +898,6 @@ static PyObject *
 odict_reduce(register PyODictObject *od, PyObject *Py_UNUSED(ignored))
 {
     _Py_IDENTIFIER(__dict__);
-    _Py_IDENTIFIER(items);
     PyObject *dict = NULL, *result = NULL;
     PyObject *items_iter, *items, *args = NULL;
 
@@ -1375,7 +1376,6 @@ static PyObject *
 odict_repr(PyODictObject *self)
 {
     int i;
-    _Py_IDENTIFIER(items);
     PyObject *pieces = NULL, *result = NULL;
 
     if (PyODict_SIZE(self) == 0)
@@ -2195,7 +2195,6 @@ mutablemapping_update(PyObject *self, PyObject *args, PyObject *kwargs)
 {
     int res = 0;
     Py_ssize_t len;
-    _Py_IDENTIFIER(items);
     _Py_IDENTIFIER(keys);
 
     /* first handle args, if any */
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index 9311f8b1f174c..e7168209324ed 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -18,6 +18,8 @@ typedef struct {
     PyObject *length;
 } rangeobject;
 
+_Py_IDENTIFIER(iter);
+
 /* Helper function for validating step.  Always returns a new reference or
    NULL on error.
 */
@@ -757,7 +759,6 @@ PyDoc_STRVAR(length_hint_doc,
 static PyObject *
 rangeiter_reduce(rangeiterobject *r, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(iter);
     PyObject *start=NULL, *stop=NULL, *step=NULL;
     PyObject *range;
 
@@ -915,7 +916,6 @@ longrangeiter_len(longrangeiterobject *r, PyObject *no_args)
 static PyObject *
 longrangeiter_reduce(longrangeiterobject *r, PyObject *Py_UNUSED(ignored))
 {
-    _Py_IDENTIFIER(iter);
     PyObject *product, *stop=NULL;
     PyObject *range;
 
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 8422a3c5a38c4..01def837803d2 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -74,6 +74,7 @@ _Py_IDENTIFIER(__new__);
 _Py_IDENTIFIER(__set_name__);
 _Py_IDENTIFIER(__setitem__);
 _Py_IDENTIFIER(builtins);
+_Py_IDENTIFIER(mro);
 
 static PyObject *
 slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
@@ -310,7 +311,6 @@ type_mro_modified(PyTypeObject *type, PyObject *bases) {
         return;
 
     if (custom) {
-        _Py_IDENTIFIER(mro);
         mro_meth = lookup_maybe_method(
             (PyObject *)type, &PyId_mro, &unbound);
         if (mro_meth == NULL)
@@ -1891,7 +1891,6 @@ mro_invoke(PyTypeObject *type)
     int custom = (Py_TYPE(type) != &PyType_Type);
 
     if (custom) {
-        _Py_IDENTIFIER(mro);
         int unbound;
         PyObject *mro_meth = lookup_method((PyObject *)type, &PyId_mro,
                                            &unbound);
diff --git a/Python/_warnings.c b/Python/_warnings.c
index b8585d204787d..602211c02efa0 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -24,6 +24,8 @@ typedef struct _warnings_runtime_state WarningsState;
 /* Forward declaration of the _warnings module definition. */
 static struct PyModuleDef warningsmodule;
 
+_Py_IDENTIFIER(__name__);
+
 /* Given a module object, get its per-module state. */
 static WarningsState *
 _Warnings_GetState()
@@ -484,7 +486,6 @@ show_warning(PyObject *filename, int lineno, PyObject *text,
     PyObject *f_stderr;
     PyObject *name;
     char lineno_str[128];
-    _Py_IDENTIFIER(__name__);
 
     PyOS_snprintf(lineno_str, sizeof(lineno_str), ":%d: ", lineno);
 
@@ -818,7 +819,6 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno,
               PyObject **module, PyObject **registry)
 {
     _Py_IDENTIFIER(__warningregistry__);
-    _Py_IDENTIFIER(__name__);
     PyObject *globals;
 
     /* Setup globals, filename and lineno. */
@@ -969,7 +969,6 @@ get_source_line(PyObject *module_globals, int lineno)
 {
     _Py_IDENTIFIER(get_source);
     _Py_IDENTIFIER(__loader__);
-    _Py_IDENTIFIER(__name__);
     PyObject *loader;
     PyObject *module_name;
     PyObject *get_source;
diff --git a/Python/ceval.c b/Python/ceval.c
index 2bf64eda4224a..892d668816ab9 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -39,6 +39,7 @@
 #  error "ceval.c must be build with Py_BUILD_CORE define for best performance"
 #endif
 
+_Py_IDENTIFIER(__name__);
 
 /* Forward declarations */
 Py_LOCAL_INLINE(PyObject *) call_function(
@@ -5032,7 +5033,6 @@ static PyObject *
 import_from(PyThreadState *tstate, PyObject *v, PyObject *name)
 {
     PyObject *x;
-    _Py_IDENTIFIER(__name__);
     PyObject *fullmodname, *pkgname, *pkgpath, *pkgname_or_unknown, *errmsg;
 
     if (_PyObject_LookupAttr(v, name, &x) != 0) {
@@ -5108,7 +5108,6 @@ import_all_from(PyThreadState *tstate, PyObject *locals, PyObject *v)
 {
     _Py_IDENTIFIER(__all__);
     _Py_IDENTIFIER(__dict__);
-    _Py_IDENTIFIER(__name__);
     PyObject *all, *dict, *name, *value;
     int skip_leading_underscores = 0;
     int pos, err;
diff --git a/Python/errors.c b/Python/errors.c
index 18ea9c5652a46..652f4c9de7a84 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -24,11 +24,11 @@ extern char *strerror(int);
 extern "C" {
 #endif
 
+_Py_IDENTIFIER(__module__);
 _Py_IDENTIFIER(builtins);
 _Py_IDENTIFIER(stderr);
 _Py_IDENTIFIER(flush);
 
-
 /* Forward declarations */
 static PyObject *
 _PyErr_FormatV(PyThreadState *tstate, PyObject *exception,
@@ -1009,7 +1009,6 @@ PyObject *
 PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
 {
     PyThreadState *tstate = _PyThreadState_GET();
-    _Py_IDENTIFIER(__module__);
     PyObject *modulename = NULL;
     PyObject *classname = NULL;
     PyObject *mydict = NULL;
@@ -1235,7 +1234,6 @@ write_unraisable_exc_file(PyThreadState *tstate, PyObject *exc_type,
         }
     }
 
-    _Py_IDENTIFIER(__module__);
     PyObject *moduleName = _PyObject_GetAttrId(exc_type, &PyId___module__);
     if (moduleName == NULL || !PyUnicode_Check(moduleName)) {
         Py_XDECREF(moduleName);
diff --git a/Python/import.c b/Python/import.c
index 2e5f78382ed44..9838c3fa04538 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -39,6 +39,9 @@ extern struct _inittab _PyImport_Inittab[];
 struct _inittab *PyImport_Inittab = _PyImport_Inittab;
 static struct _inittab *inittab_copy = NULL;
 
+_Py_IDENTIFIER(__path__);
+_Py_IDENTIFIER(__spec__);
+
 /*[clinic input]
 module _imp
 [clinic start generated code]*/
@@ -383,7 +386,6 @@ import_ensure_initialized(PyThreadState *tstate, PyObject *mod, PyObject *name)
     PyInterpreterState *interp = tstate->interp;
     PyObject *spec;
 
-    _Py_IDENTIFIER(__spec__);
     _Py_IDENTIFIER(_lock_unlock_module);
 
     /* Optimization: only call _bootstrap._lock_unlock_module() if
@@ -1566,9 +1568,7 @@ remove_importlib_frames(PyThreadState *tstate)
 static PyObject *
 resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level)
 {
-    _Py_IDENTIFIER(__spec__);
     _Py_IDENTIFIER(__package__);
-    _Py_IDENTIFIER(__path__);
     _Py_IDENTIFIER(__name__);
     _Py_IDENTIFIER(parent);
     PyObject *abs_name;
@@ -1930,7 +1930,6 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
         }
     }
     else {
-        _Py_IDENTIFIER(__path__);
         PyObject *path;
         if (_PyObject_LookupAttrId(mod, &PyId___path__, &path) < 0) {
             goto error;



More information about the Python-checkins mailing list