mirror of
				https://github.com/python/cpython.git
				synced 2025-11-01 06:01:29 +00:00 
			
		
		
		
	Issue #28701: Replace PyUnicode_CompareWithASCIIString with _PyUnicode_EqualToASCIIString.
The latter function is more readable, faster and doesn't raise exceptions.
This commit is contained in:
		
						commit
						1a73bf365e
					
				
					 22 changed files with 125 additions and 80 deletions
				
			
		|  | @ -1643,6 +1643,9 @@ They all return *NULL* or ``-1`` if an exception occurs. | ||||||
|    Compare two strings and return ``-1``, ``0``, ``1`` for less than, equal, and greater than, |    Compare two strings and return ``-1``, ``0``, ``1`` for less than, equal, and greater than, | ||||||
|    respectively. |    respectively. | ||||||
| 
 | 
 | ||||||
|  |    This function returns ``-1`` upon failure, so one should call | ||||||
|  |    :c:func:`PyErr_Occurred` to check for errors. | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| .. c:function:: int PyUnicode_CompareWithASCIIString(PyObject *uni, const char *string) | .. c:function:: int PyUnicode_CompareWithASCIIString(PyObject *uni, const char *string) | ||||||
| 
 | 
 | ||||||
|  | @ -1651,6 +1654,9 @@ They all return *NULL* or ``-1`` if an exception occurs. | ||||||
|    ASCII-encoded strings, but the function interprets the input string as |    ASCII-encoded strings, but the function interprets the input string as | ||||||
|    ISO-8859-1 if it contains non-ASCII characters. |    ISO-8859-1 if it contains non-ASCII characters. | ||||||
| 
 | 
 | ||||||
|  |    This function returns ``-1`` upon failure, so one should call | ||||||
|  |    :c:func:`PyErr_Occurred` to check for errors. | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| .. c:function:: PyObject* PyUnicode_RichCompare(PyObject *left,  PyObject *right,  int op) | .. c:function:: PyObject* PyUnicode_RichCompare(PyObject *left,  PyObject *right,  int op) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2048,6 +2048,17 @@ PyAPI_FUNC(int) PyUnicode_CompareWithASCIIString( | ||||||
|     const char *right           /* ASCII-encoded string */ |     const char *right           /* ASCII-encoded string */ | ||||||
|     ); |     ); | ||||||
| 
 | 
 | ||||||
|  | #ifndef Py_LIMITED_API | ||||||
|  | /* Test whether a unicode is equal to ASCII string.  Return 1 if true,
 | ||||||
|  |    0 otherwise.  Return 0 if any argument contains non-ASCII characters. | ||||||
|  |    Any error occurs inside will be cleared before return. */ | ||||||
|  | 
 | ||||||
|  | PyAPI_FUNC(int) _PyUnicode_EqualToASCIIString( | ||||||
|  |     PyObject *left, | ||||||
|  |     const char *right           /* ASCII-encoded string */ | ||||||
|  |     ); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| /* Rich compare two strings and return one of the following:
 | /* Rich compare two strings and return one of the following:
 | ||||||
| 
 | 
 | ||||||
|    - NULL in case an exception was raised |    - NULL in case an exception was raised | ||||||
|  |  | ||||||
|  | @ -1118,12 +1118,12 @@ context_getattr(PyObject *self, PyObject *name) | ||||||
|     PyObject *retval; |     PyObject *retval; | ||||||
| 
 | 
 | ||||||
|     if (PyUnicode_Check(name)) { |     if (PyUnicode_Check(name)) { | ||||||
|         if (PyUnicode_CompareWithASCIIString(name, "traps") == 0) { |         if (_PyUnicode_EqualToASCIIString(name, "traps")) { | ||||||
|             retval = ((PyDecContextObject *)self)->traps; |             retval = ((PyDecContextObject *)self)->traps; | ||||||
|             Py_INCREF(retval); |             Py_INCREF(retval); | ||||||
|             return retval; |             return retval; | ||||||
|         } |         } | ||||||
|         if (PyUnicode_CompareWithASCIIString(name, "flags") == 0) { |         if (_PyUnicode_EqualToASCIIString(name, "flags")) { | ||||||
|             retval = ((PyDecContextObject *)self)->flags; |             retval = ((PyDecContextObject *)self)->flags; | ||||||
|             Py_INCREF(retval); |             Py_INCREF(retval); | ||||||
|             return retval; |             return retval; | ||||||
|  | @ -1143,10 +1143,10 @@ context_setattr(PyObject *self, PyObject *name, PyObject *value) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (PyUnicode_Check(name)) { |     if (PyUnicode_Check(name)) { | ||||||
|         if (PyUnicode_CompareWithASCIIString(name, "traps") == 0) { |         if (_PyUnicode_EqualToASCIIString(name, "traps")) { | ||||||
|             return context_settraps_dict(self, value); |             return context_settraps_dict(self, value); | ||||||
|         } |         } | ||||||
|         if (PyUnicode_CompareWithASCIIString(name, "flags") == 0) { |         if (_PyUnicode_EqualToASCIIString(name, "flags")) { | ||||||
|             return context_setstatus_dict(self, value); |             return context_setstatus_dict(self, value); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -2449,14 +2449,14 @@ dectuple_as_str(PyObject *dectuple) | ||||||
|     tmp = PyTuple_GET_ITEM(dectuple, 2); |     tmp = PyTuple_GET_ITEM(dectuple, 2); | ||||||
|     if (PyUnicode_Check(tmp)) { |     if (PyUnicode_Check(tmp)) { | ||||||
|         /* special */ |         /* special */ | ||||||
|         if (PyUnicode_CompareWithASCIIString(tmp, "F") == 0) { |         if (_PyUnicode_EqualToASCIIString(tmp, "F")) { | ||||||
|             strcat(sign_special, "Inf"); |             strcat(sign_special, "Inf"); | ||||||
|             is_infinite = 1; |             is_infinite = 1; | ||||||
|         } |         } | ||||||
|         else if (PyUnicode_CompareWithASCIIString(tmp, "n") == 0) { |         else if (_PyUnicode_EqualToASCIIString(tmp, "n")) { | ||||||
|             strcat(sign_special, "NaN"); |             strcat(sign_special, "NaN"); | ||||||
|         } |         } | ||||||
|         else if (PyUnicode_CompareWithASCIIString(tmp, "N") == 0) { |         else if (_PyUnicode_EqualToASCIIString(tmp, "N")) { | ||||||
|             strcat(sign_special, "sNaN"); |             strcat(sign_special, "sNaN"); | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|  |  | ||||||
|  | @ -3661,11 +3661,11 @@ xmlparser_getattro(XMLParserObject* self, PyObject* nameobj) | ||||||
| { | { | ||||||
|     if (PyUnicode_Check(nameobj)) { |     if (PyUnicode_Check(nameobj)) { | ||||||
|         PyObject* res; |         PyObject* res; | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "entity") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "entity")) | ||||||
|             res = self->entity; |             res = self->entity; | ||||||
|         else if (PyUnicode_CompareWithASCIIString(nameobj, "target") == 0) |         else if (_PyUnicode_EqualToASCIIString(nameobj, "target")) | ||||||
|             res = self->target; |             res = self->target; | ||||||
|         else if (PyUnicode_CompareWithASCIIString(nameobj, "version") == 0) { |         else if (_PyUnicode_EqualToASCIIString(nameobj, "version")) { | ||||||
|             return PyUnicode_FromFormat( |             return PyUnicode_FromFormat( | ||||||
|                 "Expat %d.%d.%d", XML_MAJOR_VERSION, |                 "Expat %d.%d.%d", XML_MAJOR_VERSION, | ||||||
|                 XML_MINOR_VERSION, XML_MICRO_VERSION); |                 XML_MINOR_VERSION, XML_MICRO_VERSION); | ||||||
|  |  | ||||||
|  | @ -1023,7 +1023,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, | ||||||
|         else if (PyUnicode_Check(res)) { |         else if (PyUnicode_Check(res)) { | ||||||
|             const encodefuncentry *e = encodefuncs; |             const encodefuncentry *e = encodefuncs; | ||||||
|             while (e->name != NULL) { |             while (e->name != NULL) { | ||||||
|                 if (!PyUnicode_CompareWithASCIIString(res, e->name)) { |                 if (_PyUnicode_EqualToASCIIString(res, e->name)) { | ||||||
|                     self->encodefunc = e->encodefunc; |                     self->encodefunc = e->encodefunc; | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|  | @ -93,11 +93,11 @@ char _PyIO_get_console_type(PyObject *path_or_fd) { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     char m = '\0'; |     char m = '\0'; | ||||||
|     if (PyUnicode_CompareWithASCIIString(decoded_upper, "CONIN$") == 0) { |     if (_PyUnicode_EqualToASCIIString(decoded_upper, "CONIN$")) { | ||||||
|         m = 'r'; |         m = 'r'; | ||||||
|     } else if (PyUnicode_CompareWithASCIIString(decoded_upper, "CONOUT$") == 0) { |     } else if (_PyUnicode_EqualToASCIIString(decoded_upper, "CONOUT$")) { | ||||||
|         m = 'w'; |         m = 'w'; | ||||||
|     } else if (PyUnicode_CompareWithASCIIString(decoded_upper, "CON") == 0) { |     } else if (_PyUnicode_EqualToASCIIString(decoded_upper, "CON")) { | ||||||
|         m = 'x'; |         m = 'x'; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -181,7 +181,7 @@ normalizeUserObj(PyObject *obj) | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (modname != NULL) { |         if (modname != NULL) { | ||||||
|             if (PyUnicode_CompareWithASCIIString(modname, "builtins") != 0) { |             if (!_PyUnicode_EqualToASCIIString(modname, "builtins")) { | ||||||
|                 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); | ||||||
|  |  | ||||||
|  | @ -1687,7 +1687,7 @@ whichmodule(PyObject *global, PyObject *dotted_path) | ||||||
|     while (PyDict_Next(modules_dict, &i, &module_name, &module)) { |     while (PyDict_Next(modules_dict, &i, &module_name, &module)) { | ||||||
|         PyObject *candidate; |         PyObject *candidate; | ||||||
|         if (PyUnicode_Check(module_name) && |         if (PyUnicode_Check(module_name) && | ||||||
|             !PyUnicode_CompareWithASCIIString(module_name, "__main__")) |             _PyUnicode_EqualToASCIIString(module_name, "__main__")) | ||||||
|             continue; |             continue; | ||||||
|         if (module == Py_None) |         if (module == Py_None) | ||||||
|             continue; |             continue; | ||||||
|  |  | ||||||
|  | @ -1191,7 +1191,7 @@ static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, Py | ||||||
|             return -1; |             return -1; | ||||||
|         } |         } | ||||||
|         for (candidate = begin_statements; *candidate; candidate++) { |         for (candidate = begin_statements; *candidate; candidate++) { | ||||||
|             if (!PyUnicode_CompareWithASCIIString(uppercase_level, *candidate + 6)) |             if (_PyUnicode_EqualToASCIIString(uppercase_level, *candidate + 6)) | ||||||
|                 break; |                 break; | ||||||
|         } |         } | ||||||
|         Py_DECREF(uppercase_level); |         Py_DECREF(uppercase_level); | ||||||
|  |  | ||||||
|  | @ -2325,7 +2325,7 @@ test_string_from_format(PyObject *self, PyObject *args) | ||||||
|     result = PyUnicode_FromFormat(FORMAT, (TYPE)1);                 \ |     result = PyUnicode_FromFormat(FORMAT, (TYPE)1);                 \ | ||||||
|     if (result == NULL)                                             \ |     if (result == NULL)                                             \ | ||||||
|         return NULL;                                                \ |         return NULL;                                                \ | ||||||
|     if (PyUnicode_CompareWithASCIIString(result, "1")) {     \ |     if (!_PyUnicode_EqualToASCIIString(result, "1")) {              \ | ||||||
|         msg = FORMAT " failed at 1";                                \ |         msg = FORMAT " failed at 1";                                \ | ||||||
|         goto Fail;                                                  \ |         goto Fail;                                                  \ | ||||||
|     }                                                               \ |     }                                                               \ | ||||||
|  |  | ||||||
|  | @ -1244,8 +1244,7 @@ handlername2int(PyObject *name) | ||||||
| { | { | ||||||
|     int i; |     int i; | ||||||
|     for (i = 0; handler_info[i].name != NULL; i++) { |     for (i = 0; handler_info[i].name != NULL; i++) { | ||||||
|         if (PyUnicode_CompareWithASCIIString( |         if (_PyUnicode_EqualToASCIIString(name, handler_info[i].name)) { | ||||||
|                 name, handler_info[i].name) == 0) { |  | ||||||
|             return i; |             return i; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -1283,45 +1282,45 @@ xmlparse_getattro(xmlparseobject *self, PyObject *nameobj) | ||||||
| 
 | 
 | ||||||
|     first_char = PyUnicode_READ_CHAR(nameobj, 0); |     first_char = PyUnicode_READ_CHAR(nameobj, 0); | ||||||
|     if (first_char == 'E') { |     if (first_char == 'E') { | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "ErrorCode") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "ErrorCode")) | ||||||
|             return PyLong_FromLong((long) |             return PyLong_FromLong((long) | ||||||
|                                   XML_GetErrorCode(self->itself)); |                                   XML_GetErrorCode(self->itself)); | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "ErrorLineNumber") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "ErrorLineNumber")) | ||||||
|             return PyLong_FromLong((long) |             return PyLong_FromLong((long) | ||||||
|                                   XML_GetErrorLineNumber(self->itself)); |                                   XML_GetErrorLineNumber(self->itself)); | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "ErrorColumnNumber") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "ErrorColumnNumber")) | ||||||
|             return PyLong_FromLong((long) |             return PyLong_FromLong((long) | ||||||
|                                   XML_GetErrorColumnNumber(self->itself)); |                                   XML_GetErrorColumnNumber(self->itself)); | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "ErrorByteIndex") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "ErrorByteIndex")) | ||||||
|             return PyLong_FromLong((long) |             return PyLong_FromLong((long) | ||||||
|                                   XML_GetErrorByteIndex(self->itself)); |                                   XML_GetErrorByteIndex(self->itself)); | ||||||
|     } |     } | ||||||
|     if (first_char == 'C') { |     if (first_char == 'C') { | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "CurrentLineNumber") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "CurrentLineNumber")) | ||||||
|             return PyLong_FromLong((long) |             return PyLong_FromLong((long) | ||||||
|                                   XML_GetCurrentLineNumber(self->itself)); |                                   XML_GetCurrentLineNumber(self->itself)); | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "CurrentColumnNumber") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "CurrentColumnNumber")) | ||||||
|             return PyLong_FromLong((long) |             return PyLong_FromLong((long) | ||||||
|                                   XML_GetCurrentColumnNumber(self->itself)); |                                   XML_GetCurrentColumnNumber(self->itself)); | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "CurrentByteIndex") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "CurrentByteIndex")) | ||||||
|             return PyLong_FromLong((long) |             return PyLong_FromLong((long) | ||||||
|                                   XML_GetCurrentByteIndex(self->itself)); |                                   XML_GetCurrentByteIndex(self->itself)); | ||||||
|     } |     } | ||||||
|     if (first_char == 'b') { |     if (first_char == 'b') { | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "buffer_size") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "buffer_size")) | ||||||
|             return PyLong_FromLong((long) self->buffer_size); |             return PyLong_FromLong((long) self->buffer_size); | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "buffer_text") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "buffer_text")) | ||||||
|             return get_pybool(self->buffer != NULL); |             return get_pybool(self->buffer != NULL); | ||||||
|         if (PyUnicode_CompareWithASCIIString(nameobj, "buffer_used") == 0) |         if (_PyUnicode_EqualToASCIIString(nameobj, "buffer_used")) | ||||||
|             return PyLong_FromLong((long) self->buffer_used); |             return PyLong_FromLong((long) self->buffer_used); | ||||||
|     } |     } | ||||||
|     if (PyUnicode_CompareWithASCIIString(nameobj, "namespace_prefixes") == 0) |     if (_PyUnicode_EqualToASCIIString(nameobj, "namespace_prefixes")) | ||||||
|         return get_pybool(self->ns_prefixes); |         return get_pybool(self->ns_prefixes); | ||||||
|     if (PyUnicode_CompareWithASCIIString(nameobj, "ordered_attributes") == 0) |     if (_PyUnicode_EqualToASCIIString(nameobj, "ordered_attributes")) | ||||||
|         return get_pybool(self->ordered_attributes); |         return get_pybool(self->ordered_attributes); | ||||||
|     if (PyUnicode_CompareWithASCIIString(nameobj, "specified_attributes") == 0) |     if (_PyUnicode_EqualToASCIIString(nameobj, "specified_attributes")) | ||||||
|         return get_pybool((long) self->specified_attributes); |         return get_pybool((long) self->specified_attributes); | ||||||
|     if (PyUnicode_CompareWithASCIIString(nameobj, "intern") == 0) { |     if (_PyUnicode_EqualToASCIIString(nameobj, "intern")) { | ||||||
|         if (self->intern == NULL) { |         if (self->intern == NULL) { | ||||||
|             Py_INCREF(Py_None); |             Py_INCREF(Py_None); | ||||||
|             return Py_None; |             return Py_None; | ||||||
|  | @ -1383,7 +1382,7 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) | ||||||
|         PyErr_SetString(PyExc_RuntimeError, "Cannot delete attribute"); |         PyErr_SetString(PyExc_RuntimeError, "Cannot delete attribute"); | ||||||
|         return -1; |         return -1; | ||||||
|     } |     } | ||||||
|     if (PyUnicode_CompareWithASCIIString(name, "buffer_text") == 0) { |     if (_PyUnicode_EqualToASCIIString(name, "buffer_text")) { | ||||||
|         int b = PyObject_IsTrue(v); |         int b = PyObject_IsTrue(v); | ||||||
|         if (b < 0) |         if (b < 0) | ||||||
|             return -1; |             return -1; | ||||||
|  | @ -1405,7 +1404,7 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) | ||||||
|         } |         } | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|     if (PyUnicode_CompareWithASCIIString(name, "namespace_prefixes") == 0) { |     if (_PyUnicode_EqualToASCIIString(name, "namespace_prefixes")) { | ||||||
|         int b = PyObject_IsTrue(v); |         int b = PyObject_IsTrue(v); | ||||||
|         if (b < 0) |         if (b < 0) | ||||||
|             return -1; |             return -1; | ||||||
|  | @ -1413,14 +1412,14 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) | ||||||
|         XML_SetReturnNSTriplet(self->itself, self->ns_prefixes); |         XML_SetReturnNSTriplet(self->itself, self->ns_prefixes); | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|     if (PyUnicode_CompareWithASCIIString(name, "ordered_attributes") == 0) { |     if (_PyUnicode_EqualToASCIIString(name, "ordered_attributes")) { | ||||||
|         int b = PyObject_IsTrue(v); |         int b = PyObject_IsTrue(v); | ||||||
|         if (b < 0) |         if (b < 0) | ||||||
|             return -1; |             return -1; | ||||||
|         self->ordered_attributes = b; |         self->ordered_attributes = b; | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|     if (PyUnicode_CompareWithASCIIString(name, "specified_attributes") == 0) { |     if (_PyUnicode_EqualToASCIIString(name, "specified_attributes")) { | ||||||
|         int b = PyObject_IsTrue(v); |         int b = PyObject_IsTrue(v); | ||||||
|         if (b < 0) |         if (b < 0) | ||||||
|             return -1; |             return -1; | ||||||
|  | @ -1428,7 +1427,7 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (PyUnicode_CompareWithASCIIString(name, "buffer_size") == 0) { |     if (_PyUnicode_EqualToASCIIString(name, "buffer_size")) { | ||||||
|       long new_buffer_size; |       long new_buffer_size; | ||||||
|       if (!PyLong_Check(v)) { |       if (!PyLong_Check(v)) { | ||||||
|         PyErr_SetString(PyExc_TypeError, "buffer_size must be an integer"); |         PyErr_SetString(PyExc_TypeError, "buffer_size must be an integer"); | ||||||
|  | @ -1474,7 +1473,7 @@ xmlparse_setattro(xmlparseobject *self, PyObject *name, PyObject *v) | ||||||
|       return 0; |       return 0; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (PyUnicode_CompareWithASCIIString(name, "CharacterDataHandler") == 0) { |     if (_PyUnicode_EqualToASCIIString(name, "CharacterDataHandler")) { | ||||||
|         /* If we're changing the character data handler, flush all
 |         /* If we're changing the character data handler, flush all
 | ||||||
|          * cached data with the old handler.  Not sure there's a |          * cached data with the old handler.  Not sure there's a | ||||||
|          * "right" thing to do, though, but this probably won't |          * "right" thing to do, though, but this probably won't | ||||||
|  |  | ||||||
|  | @ -5166,9 +5166,9 @@ long_to_bytes(PyLongObject *v, PyObject *args, PyObject *kwds) | ||||||
|         return NULL; |         return NULL; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little")) |     if (_PyUnicode_EqualToASCIIString(byteorder_str, "little")) | ||||||
|         little_endian = 1; |         little_endian = 1; | ||||||
|     else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big")) |     else if (_PyUnicode_EqualToASCIIString(byteorder_str, "big")) | ||||||
|         little_endian = 0; |         little_endian = 0; | ||||||
|     else { |     else { | ||||||
|         PyErr_SetString(PyExc_ValueError, |         PyErr_SetString(PyExc_ValueError, | ||||||
|  | @ -5249,9 +5249,9 @@ long_from_bytes(PyTypeObject *type, PyObject *args, PyObject *kwds) | ||||||
|         return NULL; |         return NULL; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little")) |     if (_PyUnicode_EqualToASCIIString(byteorder_str, "little")) | ||||||
|         little_endian = 1; |         little_endian = 1; | ||||||
|     else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big")) |     else if (_PyUnicode_EqualToASCIIString(byteorder_str, "big")) | ||||||
|         little_endian = 0; |         little_endian = 0; | ||||||
|     else { |     else { | ||||||
|         PyErr_SetString(PyExc_ValueError, |         PyErr_SetString(PyExc_ValueError, | ||||||
|  |  | ||||||
|  | @ -586,7 +586,7 @@ _PyModule_ClearDict(PyObject *d) | ||||||
|     while (PyDict_Next(d, &pos, &key, &value)) { |     while (PyDict_Next(d, &pos, &key, &value)) { | ||||||
|         if (value != Py_None && PyUnicode_Check(key)) { |         if (value != Py_None && PyUnicode_Check(key)) { | ||||||
|             if (PyUnicode_READ_CHAR(key, 0) != '_' || |             if (PyUnicode_READ_CHAR(key, 0) != '_' || | ||||||
|                 PyUnicode_CompareWithASCIIString(key, "__builtins__") != 0) |                 !_PyUnicode_EqualToASCIIString(key, "__builtins__")) | ||||||
|             { |             { | ||||||
|                 if (Py_VerboseFlag > 1) { |                 if (Py_VerboseFlag > 1) { | ||||||
|                     const char *s = _PyUnicode_AsString(key); |                     const char *s = _PyUnicode_AsString(key); | ||||||
|  |  | ||||||
|  | @ -2412,7 +2412,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) | ||||||
|                 } |                 } | ||||||
|                 add_dict++; |                 add_dict++; | ||||||
|             } |             } | ||||||
|             if (PyUnicode_CompareWithASCIIString(tmp, "__weakref__") == 0) { |             if (_PyUnicode_EqualToASCIIString(tmp, "__weakref__")) { | ||||||
|                 if (!may_add_weak || add_weak) { |                 if (!may_add_weak || add_weak) { | ||||||
|                     PyErr_SetString(PyExc_TypeError, |                     PyErr_SetString(PyExc_TypeError, | ||||||
|                         "__weakref__ slot disallowed: " |                         "__weakref__ slot disallowed: " | ||||||
|  | @ -2436,7 +2436,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) | ||||||
|             if ((add_dict && |             if ((add_dict && | ||||||
|                  _PyUnicode_CompareWithId(tmp, &PyId___dict__) == 0) || |                  _PyUnicode_CompareWithId(tmp, &PyId___dict__) == 0) || | ||||||
|                 (add_weak && |                 (add_weak && | ||||||
|                  PyUnicode_CompareWithASCIIString(tmp, "__weakref__") == 0)) |                  _PyUnicode_EqualToASCIIString(tmp, "__weakref__"))) | ||||||
|                 continue; |                 continue; | ||||||
|             tmp =_Py_Mangle(name, tmp); |             tmp =_Py_Mangle(name, tmp); | ||||||
|             if (!tmp) { |             if (!tmp) { | ||||||
|  |  | ||||||
|  | @ -11048,6 +11048,41 @@ PyUnicode_CompareWithASCIIString(PyObject* uni, const char* str) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static int | ||||||
|  | non_ready_unicode_equal_to_ascii_string(PyObject *unicode, const char *str) | ||||||
|  | { | ||||||
|  |     size_t i, len; | ||||||
|  |     const wchar_t *p; | ||||||
|  |     len = (size_t)_PyUnicode_WSTR_LENGTH(unicode); | ||||||
|  |     if (strlen(str) != len) | ||||||
|  |         return 0; | ||||||
|  |     p = _PyUnicode_WSTR(unicode); | ||||||
|  |     assert(p); | ||||||
|  |     for (i = 0; i < len; i++) { | ||||||
|  |         unsigned char c = (unsigned char)str[i]; | ||||||
|  |         if (c > 128 || p[i] != (wchar_t)c) | ||||||
|  |             return 0; | ||||||
|  |     } | ||||||
|  |     return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | _PyUnicode_EqualToASCIIString(PyObject *unicode, const char *str) | ||||||
|  | { | ||||||
|  |     size_t len; | ||||||
|  |     assert(_PyUnicode_CHECK(unicode)); | ||||||
|  |     if (PyUnicode_READY(unicode) == -1) { | ||||||
|  |         /* Memory error or bad data */ | ||||||
|  |         PyErr_Clear(); | ||||||
|  |         return non_ready_unicode_equal_to_ascii_string(unicode, str); | ||||||
|  |     } | ||||||
|  |     if (!PyUnicode_IS_ASCII(unicode)) | ||||||
|  |         return 0; | ||||||
|  |     len = (size_t)PyUnicode_GET_LENGTH(unicode); | ||||||
|  |     return strlen(str) == len && | ||||||
|  |            memcmp(PyUnicode_1BYTE_DATA(unicode), str, len) == 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| #define TEST_COND(cond)                         \ | #define TEST_COND(cond)                         \ | ||||||
|     ((cond) ? Py_True : Py_False) |     ((cond) ? Py_True : Py_False) | ||||||
|  |  | ||||||
|  | @ -503,7 +503,7 @@ warn_explicit(PyObject *category, PyObject *message, | ||||||
|     if (action == NULL) |     if (action == NULL) | ||||||
|         goto cleanup; |         goto cleanup; | ||||||
| 
 | 
 | ||||||
|     if (PyUnicode_CompareWithASCIIString(action, "error") == 0) { |     if (_PyUnicode_EqualToASCIIString(action, "error")) { | ||||||
|         PyErr_SetObject(category, message); |         PyErr_SetObject(category, message); | ||||||
|         goto cleanup; |         goto cleanup; | ||||||
|     } |     } | ||||||
|  | @ -511,13 +511,13 @@ warn_explicit(PyObject *category, PyObject *message, | ||||||
|     /* Store in the registry that we've been here, *except* when the action
 |     /* Store in the registry that we've been here, *except* when the action
 | ||||||
|        is "always". */ |        is "always". */ | ||||||
|     rc = 0; |     rc = 0; | ||||||
|     if (PyUnicode_CompareWithASCIIString(action, "always") != 0) { |     if (!_PyUnicode_EqualToASCIIString(action, "always")) { | ||||||
|         if (registry != NULL && registry != Py_None && |         if (registry != NULL && registry != Py_None && | ||||||
|                 PyDict_SetItem(registry, key, Py_True) < 0) |                 PyDict_SetItem(registry, key, Py_True) < 0) | ||||||
|             goto cleanup; |             goto cleanup; | ||||||
|         else if (PyUnicode_CompareWithASCIIString(action, "ignore") == 0) |         else if (_PyUnicode_EqualToASCIIString(action, "ignore")) | ||||||
|             goto return_none; |             goto return_none; | ||||||
|         else if (PyUnicode_CompareWithASCIIString(action, "once") == 0) { |         else if (_PyUnicode_EqualToASCIIString(action, "once")) { | ||||||
|             if (registry == NULL || registry == Py_None) { |             if (registry == NULL || registry == Py_None) { | ||||||
|                 registry = get_once_registry(); |                 registry = get_once_registry(); | ||||||
|                 if (registry == NULL) |                 if (registry == NULL) | ||||||
|  | @ -526,12 +526,12 @@ warn_explicit(PyObject *category, PyObject *message, | ||||||
|             /* _once_registry[(text, category)] = 1 */ |             /* _once_registry[(text, category)] = 1 */ | ||||||
|             rc = update_registry(registry, text, category, 0); |             rc = update_registry(registry, text, category, 0); | ||||||
|         } |         } | ||||||
|         else if (PyUnicode_CompareWithASCIIString(action, "module") == 0) { |         else if (_PyUnicode_EqualToASCIIString(action, "module")) { | ||||||
|             /* registry[(text, category, 0)] = 1 */ |             /* registry[(text, category, 0)] = 1 */ | ||||||
|             if (registry != NULL && registry != Py_None) |             if (registry != NULL && registry != Py_None) | ||||||
|                 rc = update_registry(registry, text, category, 0); |                 rc = update_registry(registry, text, category, 0); | ||||||
|         } |         } | ||||||
|         else if (PyUnicode_CompareWithASCIIString(action, "default") != 0) { |         else if (!_PyUnicode_EqualToASCIIString(action, "default")) { | ||||||
|             PyErr_Format(PyExc_RuntimeError, |             PyErr_Format(PyExc_RuntimeError, | ||||||
|                         "Unrecognized action (%R) in warnings.filters:\n %R", |                         "Unrecognized action (%R) in warnings.filters:\n %R", | ||||||
|                         action, item); |                         action, item); | ||||||
|  | @ -715,7 +715,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_EqualToASCIIString(*module, "__main__")) { | ||||||
|             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 */ | ||||||
|  |  | ||||||
|  | @ -934,12 +934,12 @@ forbidden_name(struct compiling *c, identifier name, const node *n, | ||||||
|                int full_checks) |                int full_checks) | ||||||
| { | { | ||||||
|     assert(PyUnicode_Check(name)); |     assert(PyUnicode_Check(name)); | ||||||
|     if (PyUnicode_CompareWithASCIIString(name, "__debug__") == 0) { |     if (_PyUnicode_EqualToASCIIString(name, "__debug__")) { | ||||||
|         ast_error(c, n, "assignment to keyword"); |         ast_error(c, n, "assignment to keyword"); | ||||||
|         return 1; |         return 1; | ||||||
|     } |     } | ||||||
|     if (PyUnicode_CompareWithASCIIString(name, "async") == 0 || |     if (_PyUnicode_EqualToASCIIString(name, "async") || | ||||||
|         PyUnicode_CompareWithASCIIString(name, "await") == 0) |         _PyUnicode_EqualToASCIIString(name, "await")) | ||||||
|     { |     { | ||||||
|         PyObject *message = PyUnicode_FromString( |         PyObject *message = PyUnicode_FromString( | ||||||
|             "'async' and 'await' will become reserved keywords" |             "'async' and 'await' will become reserved keywords" | ||||||
|  | @ -963,7 +963,7 @@ forbidden_name(struct compiling *c, identifier name, const node *n, | ||||||
|     if (full_checks) { |     if (full_checks) { | ||||||
|         const char * const *p; |         const char * const *p; | ||||||
|         for (p = FORBIDDEN; *p; p++) { |         for (p = FORBIDDEN; *p; p++) { | ||||||
|             if (PyUnicode_CompareWithASCIIString(name, *p) == 0) { |             if (_PyUnicode_EqualToASCIIString(name, *p)) { | ||||||
|                 ast_error(c, n, "assignment to keyword"); |                 ast_error(c, n, "assignment to keyword"); | ||||||
|                 return 1; |                 return 1; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -1522,7 +1522,7 @@ get_ref_type(struct compiler *c, PyObject *name) | ||||||
| { | { | ||||||
|     int scope; |     int scope; | ||||||
|     if (c->u->u_scope_type == COMPILER_SCOPE_CLASS && |     if (c->u->u_scope_type == COMPILER_SCOPE_CLASS && | ||||||
|         !PyUnicode_CompareWithASCIIString(name, "__class__")) |         _PyUnicode_EqualToASCIIString(name, "__class__")) | ||||||
|         return CELL; |         return CELL; | ||||||
|     scope = PyST_GetScope(c->u->u_ste, name); |     scope = PyST_GetScope(c->u->u_ste, name); | ||||||
|     if (scope == 0) { |     if (scope == 0) { | ||||||
|  | @ -2688,7 +2688,7 @@ compiler_from_import(struct compiler *c, stmt_ty s) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (s->lineno > c->c_future->ff_lineno && s->v.ImportFrom.module && |     if (s->lineno > c->c_future->ff_lineno && s->v.ImportFrom.module && | ||||||
|         !PyUnicode_CompareWithASCIIString(s->v.ImportFrom.module, "__future__")) { |         _PyUnicode_EqualToASCIIString(s->v.ImportFrom.module, "__future__")) { | ||||||
|         Py_DECREF(level); |         Py_DECREF(level); | ||||||
|         Py_DECREF(names); |         Py_DECREF(names); | ||||||
|         return compiler_error(c, "from __future__ imports must occur " |         return compiler_error(c, "from __future__ imports must occur " | ||||||
|  | @ -3027,9 +3027,9 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) | ||||||
|     if (!mangled) |     if (!mangled) | ||||||
|         return 0; |         return 0; | ||||||
| 
 | 
 | ||||||
|     assert(PyUnicode_CompareWithASCIIString(name, "None") && |     assert(!_PyUnicode_EqualToASCIIString(name, "None") && | ||||||
|            PyUnicode_CompareWithASCIIString(name, "True") && |            !_PyUnicode_EqualToASCIIString(name, "True") && | ||||||
|            PyUnicode_CompareWithASCIIString(name, "False")); |            !_PyUnicode_EqualToASCIIString(name, "False")); | ||||||
| 
 | 
 | ||||||
|     op = 0; |     op = 0; | ||||||
|     optype = OP_NAME; |     optype = OP_NAME; | ||||||
|  |  | ||||||
|  | @ -102,7 +102,7 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, PyObject *filename) | ||||||
|         if (s->kind == ImportFrom_kind) { |         if (s->kind == ImportFrom_kind) { | ||||||
|             identifier modname = s->v.ImportFrom.module; |             identifier modname = s->v.ImportFrom.module; | ||||||
|             if (modname && |             if (modname && | ||||||
|                 !PyUnicode_CompareWithASCIIString(modname, "__future__")) { |                 _PyUnicode_EqualToASCIIString(modname, "__future__")) { | ||||||
|                 if (done) { |                 if (done) { | ||||||
|                     PyErr_SetString(PyExc_SyntaxError, |                     PyErr_SetString(PyExc_SyntaxError, | ||||||
|                                     ERR_LATE_FUTURE); |                                     ERR_LATE_FUTURE); | ||||||
|  |  | ||||||
|  | @ -1808,7 +1808,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, | ||||||
|                 return cleanreturn(0, &freelist); |                 return cleanreturn(0, &freelist); | ||||||
|             } |             } | ||||||
|             for (i = 0; i < len; i++) { |             for (i = 0; i < len; i++) { | ||||||
|                 if (*kwlist[i] && !PyUnicode_CompareWithASCIIString(key, kwlist[i])) { |                 if (*kwlist[i] && _PyUnicode_EqualToASCIIString(key, kwlist[i])) { | ||||||
|                     match = 1; |                     match = 1; | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|  | @ -936,10 +936,9 @@ static const struct _frozen * find_frozen(PyObject *); | ||||||
| static int | static int | ||||||
| is_builtin(PyObject *name) | is_builtin(PyObject *name) | ||||||
| { | { | ||||||
|     int i, cmp; |     int i; | ||||||
|     for (i = 0; PyImport_Inittab[i].name != NULL; i++) { |     for (i = 0; PyImport_Inittab[i].name != NULL; i++) { | ||||||
|         cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name); |         if (_PyUnicode_EqualToASCIIString(name, PyImport_Inittab[i].name)) { | ||||||
|         if (cmp == 0) { |  | ||||||
|             if (PyImport_Inittab[i].initfunc == NULL) |             if (PyImport_Inittab[i].initfunc == NULL) | ||||||
|                 return -1; |                 return -1; | ||||||
|             else |             else | ||||||
|  | @ -1059,7 +1058,7 @@ _imp_create_builtin(PyObject *module, PyObject *spec) | ||||||
| 
 | 
 | ||||||
|     for (p = PyImport_Inittab; p->name != NULL; p++) { |     for (p = PyImport_Inittab; p->name != NULL; p++) { | ||||||
|         PyModuleDef *def; |         PyModuleDef *def; | ||||||
|         if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) { |         if (_PyUnicode_EqualToASCIIString(name, p->name)) { | ||||||
|             if (p->initfunc == NULL) { |             if (p->initfunc == NULL) { | ||||||
|                 /* Cannot re-init internal module ("sys" or "builtins") */ |                 /* Cannot re-init internal module ("sys" or "builtins") */ | ||||||
|                 mod = PyImport_AddModule(namestr); |                 mod = PyImport_AddModule(namestr); | ||||||
|  | @ -1109,7 +1108,7 @@ find_frozen(PyObject *name) | ||||||
|     for (p = PyImport_FrozenModules; ; p++) { |     for (p = PyImport_FrozenModules; ; p++) { | ||||||
|         if (p->name == NULL) |         if (p->name == NULL) | ||||||
|             return NULL; |             return NULL; | ||||||
|         if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) |         if (_PyUnicode_EqualToASCIIString(name, p->name)) | ||||||
|             break; |             break; | ||||||
|     } |     } | ||||||
|     return p; |     return p; | ||||||
|  | @ -1310,12 +1309,8 @@ remove_importlib_frames(void) | ||||||
|         int now_in_importlib; |         int now_in_importlib; | ||||||
| 
 | 
 | ||||||
|         assert(PyTraceBack_Check(tb)); |         assert(PyTraceBack_Check(tb)); | ||||||
|         now_in_importlib = (PyUnicode_CompareWithASCIIString( |         now_in_importlib = _PyUnicode_EqualToASCIIString(code->co_filename, importlib_filename) || | ||||||
|                                 code->co_filename, |                            _PyUnicode_EqualToASCIIString(code->co_filename, external_filename); | ||||||
|                                 importlib_filename) == 0) || |  | ||||||
|                            (PyUnicode_CompareWithASCIIString( |  | ||||||
|                                 code->co_filename, |  | ||||||
|                                 external_filename) == 0); |  | ||||||
|         if (now_in_importlib && !in_importlib) { |         if (now_in_importlib && !in_importlib) { | ||||||
|             /* This is the link to this chunk of importlib tracebacks */ |             /* This is the link to this chunk of importlib tracebacks */ | ||||||
|             outer_link = prev_link; |             outer_link = prev_link; | ||||||
|  | @ -1324,8 +1319,7 @@ remove_importlib_frames(void) | ||||||
| 
 | 
 | ||||||
|         if (in_importlib && |         if (in_importlib && | ||||||
|             (always_trim || |             (always_trim || | ||||||
|              PyUnicode_CompareWithASCIIString(code->co_name, |              _PyUnicode_EqualToASCIIString(code->co_name, remove_frames))) { | ||||||
|                                               remove_frames) == 0)) { |  | ||||||
|             Py_XINCREF(next); |             Py_XINCREF(next); | ||||||
|             Py_XSETREF(*outer_link, next); |             Py_XSETREF(*outer_link, next); | ||||||
|             prev_link = outer_link; |             prev_link = outer_link; | ||||||
|  |  | ||||||
|  | @ -1503,7 +1503,7 @@ symtable_visit_expr(struct symtable *st, expr_ty e) | ||||||
|         /* Special-case super: it counts as a use of __class__ */ |         /* Special-case super: it counts as a use of __class__ */ | ||||||
|         if (e->v.Name.ctx == Load && |         if (e->v.Name.ctx == Load && | ||||||
|             st->st_cur->ste_type == FunctionBlock && |             st->st_cur->ste_type == FunctionBlock && | ||||||
|             !PyUnicode_CompareWithASCIIString(e->v.Name.id, "super")) { |             _PyUnicode_EqualToASCIIString(e->v.Name.id, "super")) { | ||||||
|             if (!GET_IDENTIFIER(__class__) || |             if (!GET_IDENTIFIER(__class__) || | ||||||
|                 !symtable_add_def(st, __class__, USE)) |                 !symtable_add_def(st, __class__, USE)) | ||||||
|                 VISIT_QUIT(st, 0); |                 VISIT_QUIT(st, 0); | ||||||
|  | @ -1652,7 +1652,7 @@ symtable_visit_alias(struct symtable *st, alias_ty a) | ||||||
|         store_name = name; |         store_name = name; | ||||||
|         Py_INCREF(store_name); |         Py_INCREF(store_name); | ||||||
|     } |     } | ||||||
|     if (PyUnicode_CompareWithASCIIString(name, "*")) { |     if (!_PyUnicode_EqualToASCIIString(name, "*")) { | ||||||
|         int r = symtable_add_def(st, store_name, DEF_IMPORT); |         int r = symtable_add_def(st, store_name, DEF_IMPORT); | ||||||
|         Py_DECREF(store_name); |         Py_DECREF(store_name); | ||||||
|         return r; |         return r; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Serhiy Storchaka
						Serhiy Storchaka