Added the const qualifier to char* variables that refer to readonly internal
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 20 Nov 2016 08:16:47 +0000 (10:16 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Sun, 20 Nov 2016 08:16:47 +0000 (10:16 +0200)
UTF-8 represenatation of Unicode objects.

29 files changed:
Modules/_ctypes/_ctypes.c
Modules/_ctypes/stgdict.c
Modules/_elementtree.c
Modules/_io/bufferedio.c
Modules/_io/stringio.c
Modules/_pickle.c
Modules/_sqlite/connection.c
Modules/_sqlite/row.c
Modules/_sqlite/statement.c
Modules/_tkinter.c
Modules/socketmodule.c
Modules/syslogmodule.c
Objects/fileobject.c
Objects/floatobject.c
Objects/longobject.c
Objects/moduleobject.c
Objects/setobject.c
Objects/structseq.c
Objects/typeobject.c
Python/bltinmodule.c
Python/ceval.c
Python/codecs.c
Python/compile.c
Python/getargs.c
Python/import.c
Python/pylifecycle.c
Python/pythonrun.c
Python/structmember.c
Python/sysmodule.c

index 4807e4f51dd4bfff70bfc215753bf0147e420ab8..de1ae3d0cbd4f633545224081fa926dad810aa5e 100644 (file)
@@ -1829,7 +1829,7 @@ static PyCArgObject *
 PyCSimpleType_paramfunc(CDataObject *self)
 {
     StgDictObject *dict;
-    char *fmt;
+    const char *fmt;
     PyCArgObject *parg;
     struct fielddesc *fd;
 
@@ -2039,7 +2039,7 @@ static PyObject *
 PyCSimpleType_from_param(PyObject *type, PyObject *value)
 {
     StgDictObject *dict;
-    char *fmt;
+    const char *fmt;
     PyCArgObject *parg;
     struct fielddesc *fd;
     PyObject *as_parameter;
index 716d1e9e8eb5df76d10078afff02072e9ecd71db..53cfa79864b6ee99dbcb0f972220b1e33dcbfe80 100644 (file)
@@ -488,8 +488,8 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct
             bitsize = 0;
 
         if (isStruct && !isPacked) {
-            char *fieldfmt = dict->format ? dict->format : "B";
-            char *fieldname = PyUnicode_AsUTF8(name);
+            const char *fieldfmt = dict->format ? dict->format : "B";
+            const char *fieldname = PyUnicode_AsUTF8(name);
             char *ptr;
             Py_ssize_t len;
             char *buf;
index 59375204eea6993f46c40c16f228afff9dee9bd4..71245c23d96c6508314a69cb47790059681e7e1d 100644 (file)
@@ -3613,7 +3613,7 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self,
 
     for (i = 0; i < PySequence_Size(events_seq); ++i) {
         PyObject *event_name_obj = PySequence_Fast_GET_ITEM(events_seq, i);
-        char *event_name = NULL;
+        const char *event_name = NULL;
         if (PyUnicode_Check(event_name_obj)) {
             event_name = PyUnicode_AsUTF8(event_name_obj);
         } else if (PyBytes_Check(event_name_obj)) {
index c760522616ad72c6ab5f7468b8b853173c6b07f8..2b43fd859c50687f5e72a62f566d8bf56288622c 100644 (file)
@@ -305,7 +305,7 @@ _enter_buffered_busy(buffered *self)
             "could not acquire lock for %A at interpreter "
             "shutdown, possibly due to daemon threads",
             (PyObject *) self);
-        char *msg = PyUnicode_AsUTF8(msgobj);
+        const char *msg = PyUnicode_AsUTF8(msgobj);
         Py_FatalError(msg);
     }
     return 1;
index 8542efd9726a7aab74efa3ba1998de232713184e..93c8b47de396fd00b273ed8d1220515856e5f724 100644 (file)
@@ -693,7 +693,7 @@ _io_StringIO___init___impl(stringio *self, PyObject *value,
                            PyObject *newline_obj)
 /*[clinic end generated code: output=a421ea023b22ef4e input=cee2d9181b2577a3]*/
 {
-    char *newline = "\n";
+    const char *newline = "\n";
     Py_ssize_t value_len;
 
     /* Parse the newline argument. We only want to allow unicode objects or
index 79113e0a93bb770ad747dabb5e188285529b5ca7..d6d5cca10fa426a1d5216f82e625994d0d759c3e 100644 (file)
@@ -1941,7 +1941,7 @@ save_long(PicklerObject *self, PyObject *obj)
             goto error;
     }
     else {
-        char *string;
+        const char *string;
 
         /* proto < 2: write the repr and newline.  This is quadratic-time (in
            the number of digits), in both directions.  We add a trailing 'L'
@@ -2218,7 +2218,7 @@ write_unicode_binary(PicklerObject *self, PyObject *obj)
 {
     PyObject *encoded = NULL;
     Py_ssize_t size;
-    char *data;
+    const char *data;
     int r;
 
     if (PyUnicode_READY(obj))
index 1c6aa54c224d36eff47aec3d91ec0e0875d7c1ca..4cd3cb3e0502bb00ec9a67a15503e441688ecf8d 100644 (file)
@@ -1489,7 +1489,7 @@ pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args)
     PyObject* retval;
     Py_ssize_t i, len;
     _Py_IDENTIFIER(upper);
-    char *uppercase_name_str;
+    const char *uppercase_name_str;
     int rc;
     unsigned int kind;
     void *data;
index 53342f3444c097bc9b1801596c672a0385ec8fa1..c6c3e98bb2040a2e815c48b3d790e3a7e7933364 100644 (file)
@@ -79,12 +79,12 @@ PyObject* pysqlite_row_item(pysqlite_Row* self, Py_ssize_t idx)
 PyObject* pysqlite_row_subscript(pysqlite_Row* self, PyObject* idx)
 {
     Py_ssize_t _idx;
-    char* key;
+    const char *key;
     Py_ssize_t nitems, i;
-    char* compare_key;
+    const char *compare_key;
 
-    char* p1;
-    char* p2;
+    const char *p1;
+    const char *p2;
 
     PyObject* item;
 
index 0df661b9c7ad315a0f2a76dfd939b8a0738867b3..8b45a0332044ea0087ffa7dcd9fb42e9636a5571 100644 (file)
@@ -112,7 +112,7 @@ int pysqlite_statement_create(pysqlite_Statement* self, pysqlite_Connection* con
 int pysqlite_statement_bind_parameter(pysqlite_Statement* self, int pos, PyObject* parameter)
 {
     int rc = SQLITE_OK;
-    char* string;
+    const char *string;
     Py_ssize_t buflen;
     parameter_type paramtype;
 
index 3e96aa0cd50c64cbe95a1c1fed7f7e046cf900a1..f69a4dfed9bd2b4cb7193bcc4f0c17d53a5bed43 100644 (file)
@@ -536,7 +536,7 @@ SplitObj(PyObject *arg)
     else if (PyUnicode_Check(arg)) {
         int argc;
         const char **argv;
-        char *list = PyUnicode_AsUTF8(arg);
+        const char *list = PyUnicode_AsUTF8(arg);
 
         if (list == NULL ||
             Tcl_SplitList((Tcl_Interp *)NULL, list, &argc, &argv) != TCL_OK) {
@@ -993,7 +993,7 @@ asBignumObj(PyObject *value)
     Tcl_Obj *result;
     int neg;
     PyObject *hexstr;
-    char *hexchars;
+    const char *hexchars;
     mp_int bigValue;
 
     neg = Py_SIZE(value) < 0;
@@ -1723,7 +1723,7 @@ class varname_converter(CConverter):
 static int
 varname_converter(PyObject *in, void *_out)
 {
-    char *s;
+    const char *s;
     const char **out = (const char**)_out;
     if (PyBytes_Check(in)) {
         if (PyBytes_GET_SIZE(in) > INT_MAX) {
index feaa212a0ab0fd88c7e57152d63eb43267f6a2d0..7f6cd4d10a2b4931f3c279ed8294d2d005c8f9df 100644 (file)
@@ -5982,7 +5982,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs)
     PyObject *hobj = NULL;
     PyObject *pobj = (PyObject *)NULL;
     char pbuf[30];
-    char *hptr, *pptr;
+    const char *hptr, *pptr;
     int family, socktype, protocol, flags;
     int error;
     PyObject *all = (PyObject *)NULL;
index 7afca58d0ec8c986763f6ba3980e1358a2df644b..412e4365e510ebeee5310bb68ee4c8ca1ba69841 100644 (file)
@@ -116,7 +116,7 @@ syslog_openlog(PyObject * self, PyObject * args, PyObject *kwds)
     long facility = LOG_USER;
     PyObject *new_S_ident_o = NULL;
     static char *keywords[] = {"ident", "logoption", "facility", 0};
-    char *ident = NULL;
+    const char *ident = NULL;
 
     if (!PyArg_ParseTupleAndKeywords(args, kwds,
                           "|Ull:openlog", keywords, &new_S_ident_o, &logopt, &facility))
index f4424184d2df1beae58ae7beec0f037cbb3aa59c..32f8a8983ef54705385f0356e59811056a9476cc 100644 (file)
@@ -367,7 +367,7 @@ stdprinter_write(PyStdPrinter_Object *self, PyObject *args)
 {
     PyObject *unicode;
     PyObject *bytes = NULL;
-    char *str;
+    const char *str;
     Py_ssize_t n;
     int err;
 
@@ -389,10 +389,8 @@ stdprinter_write(PyStdPrinter_Object *self, PyObject *args)
         bytes = _PyUnicode_AsUTF8String(unicode, "backslashreplace");
         if (bytes == NULL)
             return NULL;
-        if (PyBytes_AsStringAndSize(bytes, &str, &n) < 0) {
-            Py_DECREF(bytes);
-            return NULL;
-        }
+        str = PyBytes_AS_STRING(bytes);
+        n = PyBytes_GET_SIZE(bytes);
     }
 
     n = _Py_write(self->fd, str, n);
index 80bf71efd21a4e424d8da48a54f969f777f6f99d..17a55dd114d42e27a1215b84f4463083fb271e07 100644 (file)
@@ -1225,7 +1225,7 @@ float_fromhex(PyObject *cls, PyObject *arg)
     PyObject *result;
     double x;
     long exp, top_exp, lsb, key_digit;
-    char *s, *coeff_start, *s_store, *coeff_end, *exp_start, *s_end;
+    const char *s, *coeff_start, *s_store, *coeff_end, *exp_start, *s_end;
     int half_eps, digit, round_up, negate=0;
     Py_ssize_t length, ndigits, fdigits, i;
 
@@ -1288,7 +1288,7 @@ float_fromhex(PyObject *cls, PyObject *arg)
         s++;
 
     /* infinities and nans */
-    x = _Py_parse_inf_or_nan(s, &coeff_end);
+    x = _Py_parse_inf_or_nan(s, (char **)&coeff_end);
     if (coeff_end != s) {
         s = coeff_end;
         goto finished;
@@ -1619,7 +1619,7 @@ static float_format_type detected_double_format, detected_float_format;
 static PyObject *
 float_getformat(PyTypeObject *v, PyObject* arg)
 {
-    char* s;
+    const char *s;
     float_format_type r;
 
     if (!PyUnicode_Check(arg)) {
index b0f6b8c9533d8d19961b28a8473fab50e49497c4..822ed1632fde6ad7406af2357974ca0199d6dcf2 100644 (file)
@@ -2491,7 +2491,8 @@ PyObject *
 PyLong_FromUnicodeObject(PyObject *u, int base)
 {
     PyObject *result, *asciidig;
-    char *buffer, *end = NULL;
+    const char *buffer;
+    char *end = NULL;
     Py_ssize_t buflen;
 
     asciidig = _PyUnicode_TransformDecimalAndSpaceToASCII(u);
index 79be51a806b707233aed5d98ddef675feb38d05b..701bcb1df3516c7eca79c3e2b9810a983120de1c 100644 (file)
@@ -231,7 +231,7 @@ PyModule_FromDefAndSpec2(struct PyModuleDef* def, PyObject *spec, int module_api
     PyObject *nameobj;
     PyObject *m = NULL;
     int has_execution_slots = 0;
-    char *name;
+    const char *name;
     int ret;
 
     PyModuleDef_Init(def);
@@ -512,7 +512,7 @@ const char *
 PyModule_GetFilename(PyObject *m)
 {
     PyObject *fileobj;
-    char *utf8;
+    const char *utf8;
     fileobj = PyModule_GetFilenameObject(m);
     if (fileobj == NULL)
         return NULL;
index fdb9d3600d9fad28c724c21e0ca5f9628074eaab..b7e0617db3b3c0f34a735fc22af39f382335f3bd 100644 (file)
@@ -2398,7 +2398,7 @@ static PyObject *
 test_c_api(PySetObject *so)
 {
     Py_ssize_t count;
-    char *s;
+    const char *s;
     Py_ssize_t i;
     PyObject *elem=NULL, *dup=NULL, *t, *f, *dup2, *x=NULL;
     PyObject *ob = (PyObject *)so;
index 5489aef6d087475abf3b1ad129d0cd6622b5b0aa..6f1782f29b836336f63144afaeb28e8e68c1409f 100644 (file)
@@ -182,7 +182,7 @@ structseq_repr(PyStructSequence *obj)
 
     for (i=0; i < VISIBLE_SIZE(obj); i++) {
         PyObject *val, *repr;
-        char *cname, *crepr;
+        const char *cname, *crepr;
 
         cname = typ->tp_members[i].name;
         if (cname == NULL) {
index 606e08e449e0d8528cf736a718c3db63af71f15c..af092716805a8cad45f8c2b4b923cffcca8d7de0 100644 (file)
@@ -1624,7 +1624,7 @@ consistent method resolution\norder (MRO) for bases");
     i = 0;
     while (PyDict_Next(set, &i, &k, &v) && (size_t)off < sizeof(buf)) {
         PyObject *name = class_name(k);
-        char *name_str;
+        const char *name_str;
         if (name != NULL) {
             name_str = PyUnicode_AsUTF8(name);
             if (name_str == NULL)
@@ -2572,7 +2572,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
         PyObject *doc = _PyDict_GetItemId(dict, &PyId___doc__);
         if (doc != NULL && PyUnicode_Check(doc)) {
             Py_ssize_t len;
-            char *doc_str;
+            const char *doc_str;
             char *tp_doc;
 
             doc_str = PyUnicode_AsUTF8(doc);
index a49cb9d103ef25cd733f18f215eb5489adc660c1..5c925452e66b18a22bc529a6142491ff1da6115f 100644 (file)
@@ -1893,7 +1893,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt)
         char *s = NULL;
         PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
         PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
-        char *stdin_encoding_str, *stdin_errors_str;
+        const char *stdin_encoding_str, *stdin_errors_str;
         PyObject *result;
         size_t len;
 
@@ -1914,7 +1914,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt)
             Py_DECREF(tmp);
         if (prompt != NULL) {
             /* We have a prompt, encode it as stdout would */
-            char *stdout_encoding_str, *stdout_errors_str;
+            const char *stdout_encoding_str, *stdout_errors_str;
             PyObject *stringpo;
             stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
             stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
index bbbf005f0028b246553d1675a52e827700c4a6f2..b08427d7bd170b300e0d491da4ce4a490c84f5db 100644 (file)
@@ -5440,8 +5440,8 @@ _PyEval_RequestCodeExtraIndex(freefunc free)
 static void
 dtrace_function_entry(PyFrameObject *f)
 {
-    char* filename;
-    char* funcname;
+    const char *filename;
+    const char *funcname;
     int lineno;
 
     filename = PyUnicode_AsUTF8(f->f_code->co_filename);
@@ -5454,8 +5454,8 @@ dtrace_function_entry(PyFrameObject *f)
 static void
 dtrace_function_return(PyFrameObject *f)
 {
-    char* filename;
-    char* funcname;
+    const char *filename;
+    const char *funcname;
     int lineno;
 
     filename = PyUnicode_AsUTF8(f->f_code->co_filename);
@@ -5471,7 +5471,7 @@ maybe_dtrace_line(PyFrameObject *frame,
                   int *instr_lb, int *instr_ub, int *instr_prev)
 {
     int line = frame->f_lineno;
-    char *co_filename, *co_name;
+    const char *co_filename, *co_name;
 
     /* If the last instruction executed isn't in the current
        instruction window, reset the window.
index 96b3611da2524e855a5a574ec0b6df063099a223..bf152c2e56f997f463e0dbed9912273acbc57254 100644 (file)
@@ -1131,7 +1131,7 @@ PyCodec_SurrogatePassErrors(PyObject *exc)
     PyObject *restuple;
     PyObject *object;
     PyObject *encode;
-    char *encoding;
+    const char *encoding;
     int code;
     int bytelength;
     Py_ssize_t i;
index a8d7fcd717c35e24226926e277210c85f24d03b5..46a40a336904e56fd4a69fc37676681062a3a65b 100644 (file)
@@ -4039,7 +4039,7 @@ compiler_visit_keyword(struct compiler *c, keyword_ty k)
 static int
 expr_constant(struct compiler *c, expr_ty e)
 {
-    char *id;
+    const char *id;
     switch (e->kind) {
     case Ellipsis_kind:
         return 1;
index 616c6eb107377fc2dfbc9289e09b9671fd25cf04..a6636f461b38198288cf2cdb2155dade4cca9c9e 100644 (file)
@@ -74,7 +74,7 @@ static const char *converttuple(PyObject *, const char **, va_list *, int,
                                 int *, char *, size_t, int, freelist_t *);
 static const char *convertsimple(PyObject *, const char **, va_list *, int,
                                  char *, size_t, freelist_t *);
-static Py_ssize_t convertbuffer(PyObject *, void **p, const char **);
+static Py_ssize_t convertbuffer(PyObject *, const void **p, const char **);
 static int getbuffer(PyObject *, Py_buffer *, const char**);
 
 static int vgetargskeywords(PyObject *, PyObject *,
@@ -625,7 +625,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
 
     const char *format = *p_format;
     char c = *format++;
-    char *sarg;
+    const char *sarg;
 
     switch (c) {
 
@@ -897,7 +897,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
             }
             break;
         }
-        count = convertbuffer(arg, p, &buf);
+        count = convertbuffer(arg, (const void **)p, &buf);
         if (count < 0)
             return converterr(buf, arg, msgbuf, bufsize);
         if (*format == '#') {
@@ -928,7 +928,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
                 if (sarg == NULL)
                     return converterr(CONV_UNICODE,
                                       arg, msgbuf, bufsize);
-                PyBuffer_FillInfo(p, arg, sarg, len, 1, 0);
+                PyBuffer_FillInfo(p, arg, (void *)sarg, len, 1, 0);
             }
             else { /* any bytes-like object */
                 const char *buf;
@@ -943,7 +943,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
             format++;
         } else if (*format == '#') { /* a string or read-only bytes-like object */
             /* "s#" or "z#" */
-            void **p = (void **)va_arg(*p_va, char **);
+            const void **p = (const void **)va_arg(*p_va, const char **);
             FETCH_SIZE;
 
             if (c == 'z' && arg == Py_None) {
@@ -970,7 +970,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
             format++;
         } else {
             /* "s" or "z" */
-            char **p = va_arg(*p_va, char **);
+            const char **p = va_arg(*p_va, const char **);
             Py_ssize_t len;
             sarg = NULL;
 
@@ -1300,7 +1300,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
 }
 
 static Py_ssize_t
-convertbuffer(PyObject *arg, void **p, const char **errmsg)
+convertbuffer(PyObject *arg, const void **p, const char **errmsg)
 {
     PyBufferProcs *pb = Py_TYPE(arg)->tp_as_buffer;
     Py_ssize_t count;
index cd865a5423666ed32959c62534bf38167f697314..6bcb1d79fda429c1f1decf532379b1c2eb9af4e9 100644 (file)
@@ -1035,7 +1035,7 @@ _imp_create_builtin(PyObject *module, PyObject *spec)
 {
     struct _inittab *p;
     PyObject *name;
-    char *namestr;
+    const char *namestr;
     PyObject *mod;
 
     name = PyObject_GetAttrString(spec, "name");
index a4f7f823bc695dd82e431cd6573389eae6d89dc4..06030c330a082c433b7b8598cf2e408e76baab53 100644 (file)
@@ -193,7 +193,8 @@ add_flag(int flag, const char *envs)
 static char*
 get_codec_name(const char *encoding)
 {
-    char *name_utf8, *name_str;
+    const char *name_utf8;
+    char *name_str;
     PyObject *codec, *name = NULL;
 
     codec = _PyCodec_Lookup(encoding);
@@ -1284,8 +1285,7 @@ initstdio(void)
        when import.c tries to write to stderr in verbose mode. */
     encoding_attr = PyObject_GetAttrString(std, "encoding");
     if (encoding_attr != NULL) {
-        const char * std_encoding;
-        std_encoding = PyUnicode_AsUTF8(encoding_attr);
+        const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
         if (std_encoding != NULL) {
             PyObject *codec_info = _PyCodec_Lookup(std_encoding);
             Py_XDECREF(codec_info);
index c881f901ab5d861c689e4174d775fb01b0c6977b..b862e2b361c0613cb4807059bdf05331a2a9c68a 100644 (file)
@@ -154,7 +154,7 @@ PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags)
     PyObject *m, *d, *v, *w, *oenc = NULL, *mod_name;
     mod_ty mod;
     PyArena *arena;
-    char *ps1 = "", *ps2 = "", *enc = NULL;
+    const char *ps1 = "", *ps2 = "", *enc = NULL;
     int errcode = 0;
     _Py_IDENTIFIER(encoding);
     _Py_IDENTIFIER(__main__);
@@ -511,8 +511,8 @@ PyErr_Print(void)
 static void
 print_error_text(PyObject *f, int offset, PyObject *text_obj)
 {
-    char *text;
-    char *nl;
+    const char *text;
+    const char *nl;
 
     text = PyUnicode_AsUTF8(text_obj);
     if (text == NULL)
index be2737d405e12ccef1d0aabd3e390b6d67491a03..e653d0277c1a106398546b832677bb865faea9ee 100644 (file)
@@ -249,7 +249,7 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v)
         Py_XDECREF(oldv);
         break;
     case T_CHAR: {
-        char *string;
+        const char *string;
         Py_ssize_t len;
 
         string = PyUnicode_AsUTF8AndSize(v, &len);
index 28561ace3b7880163bd842bb5c4c23b3d06ea3f3..db5a48fe57e585a853b39bb1b246c8a0b78ef2bf 100644 (file)
@@ -108,7 +108,7 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o)
 {
     PyObject *stdout_encoding = NULL;
     PyObject *encoded, *escaped_str, *repr_str, *buffer, *result;
-    char *stdout_encoding_str;
+    const char *stdout_encoding_str;
     int ret;
 
     stdout_encoding = _PyObject_GetAttrId(outf, &PyId_encoding);
@@ -2404,7 +2404,7 @@ sys_format(_Py_Identifier *key, FILE *fp, const char *format, va_list va)
 {
     PyObject *file, *message;
     PyObject *error_type, *error_value, *error_traceback;
-    char *utf8;
+    const char *utf8;
 
     PyErr_Fetch(&error_type, &error_value, &error_traceback);
     file = _PySys_GetObjectId(key);