Mercurial > cpython-lru_cache-weakref
comparison Python/sysmodule.c @ 86974:954167ce92a3
Issue #19512: add some common identifiers to only create common strings once,
instead of creating temporary Unicode string objects
Add also more identifiers in pythonrun.c to avoid temporary Unicode string
objets for the interactive interpreter.
| author | Victor Stinner <victor.stinner@gmail.com> |
|---|---|
| date | Wed, 06 Nov 2013 22:41:44 +0100 |
| parents | 5e402c16a74c |
| children | 01c4a0af73cf |
comparison
equal
deleted
inserted
replaced
| 86973:6348764bacdd | 86974:954167ce92a3 |
|---|---|
| 181 Py_INCREF(Py_None); | 181 Py_INCREF(Py_None); |
| 182 return Py_None; | 182 return Py_None; |
| 183 } | 183 } |
| 184 if (_PyObject_SetAttrId(builtins, &PyId__, Py_None) != 0) | 184 if (_PyObject_SetAttrId(builtins, &PyId__, Py_None) != 0) |
| 185 return NULL; | 185 return NULL; |
| 186 outf = PySys_GetObject("stdout"); | 186 outf = _PySys_GetObjectId(&_PyId_stdout); |
| 187 if (outf == NULL || outf == Py_None) { | 187 if (outf == NULL || outf == Py_None) { |
| 188 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); | 188 PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); |
| 189 return NULL; | 189 return NULL; |
| 190 } | 190 } |
| 191 if (PyFile_WriteObject(o, outf, 0) != 0) { | 191 if (PyFile_WriteObject(o, outf, 0) != 0) { |
| 1823 PySys_SetPath(const wchar_t *path) | 1823 PySys_SetPath(const wchar_t *path) |
| 1824 { | 1824 { |
| 1825 PyObject *v; | 1825 PyObject *v; |
| 1826 if ((v = makepathobject(path, DELIM)) == NULL) | 1826 if ((v = makepathobject(path, DELIM)) == NULL) |
| 1827 Py_FatalError("can't create sys.path"); | 1827 Py_FatalError("can't create sys.path"); |
| 1828 if (PySys_SetObject("path", v) != 0) | 1828 if (_PySys_SetObjectId(&_PyId_path, v) != 0) |
| 1829 Py_FatalError("can't assign sys.path"); | 1829 Py_FatalError("can't assign sys.path"); |
| 1830 Py_DECREF(v); | 1830 Py_DECREF(v); |
| 1831 } | 1831 } |
| 1832 | 1832 |
| 1833 static PyObject * | 1833 static PyObject * |
| 1892 wchar_t fullpath[MAXPATHLEN]; | 1892 wchar_t fullpath[MAXPATHLEN]; |
| 1893 #elif defined(MS_WINDOWS) && !defined(MS_WINCE) | 1893 #elif defined(MS_WINDOWS) && !defined(MS_WINCE) |
| 1894 wchar_t fullpath[MAX_PATH]; | 1894 wchar_t fullpath[MAX_PATH]; |
| 1895 #endif | 1895 #endif |
| 1896 | 1896 |
| 1897 path = PySys_GetObject("path"); | 1897 path = _PySys_GetObjectId(&_PyId_path); |
| 1898 if (path == NULL) | 1898 if (path == NULL) |
| 1899 return; | 1899 return; |
| 1900 | 1900 |
| 1901 argv0 = argv[0]; | 1901 argv0 = argv[0]; |
| 1902 | 1902 |
| 2079 which can print hundreds of digits for very large numbers. | 2079 which can print hundreds of digits for very large numbers. |
| 2080 | 2080 |
| 2081 */ | 2081 */ |
| 2082 | 2082 |
| 2083 static void | 2083 static void |
| 2084 sys_write(char *name, FILE *fp, const char *format, va_list va) | 2084 sys_write(_Py_Identifier *key, FILE *fp, const char *format, va_list va) |
| 2085 { | 2085 { |
| 2086 PyObject *file; | 2086 PyObject *file; |
| 2087 PyObject *error_type, *error_value, *error_traceback; | 2087 PyObject *error_type, *error_value, *error_traceback; |
| 2088 char buffer[1001]; | 2088 char buffer[1001]; |
| 2089 int written; | 2089 int written; |
| 2090 | 2090 |
| 2091 PyErr_Fetch(&error_type, &error_value, &error_traceback); | 2091 PyErr_Fetch(&error_type, &error_value, &error_traceback); |
| 2092 file = PySys_GetObject(name); | 2092 file = _PySys_GetObjectId(key); |
| 2093 written = PyOS_vsnprintf(buffer, sizeof(buffer), format, va); | 2093 written = PyOS_vsnprintf(buffer, sizeof(buffer), format, va); |
| 2094 if (sys_pyfile_write(buffer, file) != 0) { | 2094 if (sys_pyfile_write(buffer, file) != 0) { |
| 2095 PyErr_Clear(); | 2095 PyErr_Clear(); |
| 2096 fputs(buffer, fp); | 2096 fputs(buffer, fp); |
| 2097 } | 2097 } |
| 2107 PySys_WriteStdout(const char *format, ...) | 2107 PySys_WriteStdout(const char *format, ...) |
| 2108 { | 2108 { |
| 2109 va_list va; | 2109 va_list va; |
| 2110 | 2110 |
| 2111 va_start(va, format); | 2111 va_start(va, format); |
| 2112 sys_write("stdout", stdout, format, va); | 2112 sys_write(&_PyId_stdout, stdout, format, va); |
| 2113 va_end(va); | 2113 va_end(va); |
| 2114 } | 2114 } |
| 2115 | 2115 |
| 2116 void | 2116 void |
| 2117 PySys_WriteStderr(const char *format, ...) | 2117 PySys_WriteStderr(const char *format, ...) |
| 2118 { | 2118 { |
| 2119 va_list va; | 2119 va_list va; |
| 2120 | 2120 |
| 2121 va_start(va, format); | 2121 va_start(va, format); |
| 2122 sys_write("stderr", stderr, format, va); | 2122 sys_write(&_PyId_stderr, stderr, format, va); |
| 2123 va_end(va); | 2123 va_end(va); |
| 2124 } | 2124 } |
| 2125 | 2125 |
| 2126 static void | 2126 static void |
| 2127 sys_format(char *name, FILE *fp, const char *format, va_list va) | 2127 sys_format(_Py_Identifier *key, FILE *fp, const char *format, va_list va) |
| 2128 { | 2128 { |
| 2129 PyObject *file, *message; | 2129 PyObject *file, *message; |
| 2130 PyObject *error_type, *error_value, *error_traceback; | 2130 PyObject *error_type, *error_value, *error_traceback; |
| 2131 char *utf8; | 2131 char *utf8; |
| 2132 | 2132 |
| 2133 PyErr_Fetch(&error_type, &error_value, &error_traceback); | 2133 PyErr_Fetch(&error_type, &error_value, &error_traceback); |
| 2134 file = PySys_GetObject(name); | 2134 file = _PySys_GetObjectId(key); |
| 2135 message = PyUnicode_FromFormatV(format, va); | 2135 message = PyUnicode_FromFormatV(format, va); |
| 2136 if (message != NULL) { | 2136 if (message != NULL) { |
| 2137 if (sys_pyfile_write_unicode(message, file) != 0) { | 2137 if (sys_pyfile_write_unicode(message, file) != 0) { |
| 2138 PyErr_Clear(); | 2138 PyErr_Clear(); |
| 2139 utf8 = _PyUnicode_AsString(message); | 2139 utf8 = _PyUnicode_AsString(message); |
| 2149 PySys_FormatStdout(const char *format, ...) | 2149 PySys_FormatStdout(const char *format, ...) |
| 2150 { | 2150 { |
| 2151 va_list va; | 2151 va_list va; |
| 2152 | 2152 |
| 2153 va_start(va, format); | 2153 va_start(va, format); |
| 2154 sys_format("stdout", stdout, format, va); | 2154 sys_format(&_PyId_stdout, stdout, format, va); |
| 2155 va_end(va); | 2155 va_end(va); |
| 2156 } | 2156 } |
| 2157 | 2157 |
| 2158 void | 2158 void |
| 2159 PySys_FormatStderr(const char *format, ...) | 2159 PySys_FormatStderr(const char *format, ...) |
| 2160 { | 2160 { |
| 2161 va_list va; | 2161 va_list va; |
| 2162 | 2162 |
| 2163 va_start(va, format); | 2163 va_start(va, format); |
| 2164 sys_format("stderr", stderr, format, va); | 2164 sys_format(&_PyId_stderr, stderr, format, va); |
| 2165 va_end(va); | 2165 va_end(va); |
| 2166 } | 2166 } |
