mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Remove unnecessary casts related to unicode_decode_call_errorhandler.
Make the _PyUnicode_Resize macro a static function. These changes are needed to avoid breaking strict aliasing rules.
This commit is contained in:
		
							parent
							
								
									0fc0747586
								
							
						
					
					
						commit
						034e08ce8d
					
				
					 1 changed files with 29 additions and 27 deletions
				
			
		|  | @ -386,7 +386,8 @@ void unicode_dealloc(register PyUnicodeObject *unicode) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int PyUnicode_Resize(PyObject **unicode, Py_ssize_t length) | static | ||||||
|  | int _PyUnicode_Resize(PyUnicodeObject **unicode, Py_ssize_t length) | ||||||
| { | { | ||||||
|     register PyUnicodeObject *v; |     register PyUnicodeObject *v; | ||||||
| 
 | 
 | ||||||
|  | @ -395,7 +396,7 @@ int PyUnicode_Resize(PyObject **unicode, Py_ssize_t length) | ||||||
| 	PyErr_BadInternalCall(); | 	PyErr_BadInternalCall(); | ||||||
| 	return -1; | 	return -1; | ||||||
|     } |     } | ||||||
|     v = (PyUnicodeObject *)*unicode; |     v = *unicode; | ||||||
|     if (v == NULL || !PyUnicode_Check(v) || Py_REFCNT(v) != 1 || length < 0) { |     if (v == NULL || !PyUnicode_Check(v) || Py_REFCNT(v) != 1 || length < 0) { | ||||||
| 	PyErr_BadInternalCall(); | 	PyErr_BadInternalCall(); | ||||||
| 	return -1; | 	return -1; | ||||||
|  | @ -412,7 +413,7 @@ int PyUnicode_Resize(PyObject **unicode, Py_ssize_t length) | ||||||
| 	Py_UNICODE_COPY(w->str, v->str, | 	Py_UNICODE_COPY(w->str, v->str, | ||||||
| 			length < v->length ? length : v->length); | 			length < v->length ? length : v->length); | ||||||
| 	Py_DECREF(*unicode); | 	Py_DECREF(*unicode); | ||||||
| 	*unicode = (PyObject *)w; | 	*unicode = w; | ||||||
| 	return 0; | 	return 0; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -421,9 +422,10 @@ int PyUnicode_Resize(PyObject **unicode, Py_ssize_t length) | ||||||
|     return unicode_resize(v, length); |     return unicode_resize(v, length); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Internal API for use in unicodeobject.c only ! */ | int PyUnicode_Resize(PyObject **unicode, Py_ssize_t length) | ||||||
| #define _PyUnicode_Resize(unicodevar, length) \ | { | ||||||
|         PyUnicode_Resize(((PyObject **)(unicodevar)), length) |     return _PyUnicode_Resize((PyUnicodeObject **)unicode, length); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| PyObject *PyUnicode_FromUnicode(const Py_UNICODE *u, | PyObject *PyUnicode_FromUnicode(const Py_UNICODE *u, | ||||||
| 				Py_ssize_t size) | 				Py_ssize_t size) | ||||||
|  | @ -937,7 +939,7 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) | ||||||
| 		PyObject_Free(callresults); | 		PyObject_Free(callresults); | ||||||
| 	if (abuffer) | 	if (abuffer) | ||||||
| 		PyObject_Free(abuffer); | 		PyObject_Free(abuffer); | ||||||
| 	_PyUnicode_Resize(&string, s - PyUnicode_AS_UNICODE(string)); | 	PyUnicode_Resize(&string, s - PyUnicode_AS_UNICODE(string)); | ||||||
| 	return string; | 	return string; | ||||||
|  fail: |  fail: | ||||||
| 	if (callresults) { | 	if (callresults) { | ||||||
|  | @ -1345,7 +1347,7 @@ int unicode_decode_call_errorhandler(const char *errors, PyObject **errorHandler | ||||||
|                  const char *encoding, const char *reason, |                  const char *encoding, const char *reason, | ||||||
|                  const char *input, Py_ssize_t insize, Py_ssize_t *startinpos, |                  const char *input, Py_ssize_t insize, Py_ssize_t *startinpos, | ||||||
|                  Py_ssize_t *endinpos, PyObject **exceptionObject, const char **inptr, |                  Py_ssize_t *endinpos, PyObject **exceptionObject, const char **inptr, | ||||||
|                  PyObject **output, Py_ssize_t *outpos, Py_UNICODE **outptr) |                  PyUnicodeObject **output, Py_ssize_t *outpos, Py_UNICODE **outptr) | ||||||
| { | { | ||||||
|     static char *argparse = "O!n;decoding error handler must return (unicode, int) tuple"; |     static char *argparse = "O!n;decoding error handler must return (unicode, int) tuple"; | ||||||
| 
 | 
 | ||||||
|  | @ -1405,7 +1407,7 @@ int unicode_decode_call_errorhandler(const char *errors, PyObject **errorHandler | ||||||
|     if (requiredsize > outsize) { |     if (requiredsize > outsize) { | ||||||
| 	if (requiredsize<2*outsize) | 	if (requiredsize<2*outsize) | ||||||
| 	    requiredsize = 2*outsize; | 	    requiredsize = 2*outsize; | ||||||
| 	if (PyUnicode_Resize(output, requiredsize) < 0) | 	if (_PyUnicode_Resize(output, requiredsize) < 0) | ||||||
| 	    goto onError; | 	    goto onError; | ||||||
| 	*outptr = PyUnicode_AS_UNICODE(*output) + *outpos; | 	*outptr = PyUnicode_AS_UNICODE(*output) + *outpos; | ||||||
|     } |     } | ||||||
|  | @ -1604,7 +1606,7 @@ PyObject *PyUnicode_DecodeUTF7Stateful(const char *s, | ||||||
|              errors, &errorHandler, |              errors, &errorHandler, | ||||||
|              "utf7", errmsg, |              "utf7", errmsg, | ||||||
|              starts, size, &startinpos, &endinpos, &exc, &s, |              starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
|              (PyObject **)&unicode, &outpos, &p)) |              &unicode, &outpos, &p)) | ||||||
|         goto onError; |         goto onError; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -1615,7 +1617,7 @@ PyObject *PyUnicode_DecodeUTF7Stateful(const char *s, | ||||||
|              errors, &errorHandler, |              errors, &errorHandler, | ||||||
|              "utf7", "unterminated shift sequence", |              "utf7", "unterminated shift sequence", | ||||||
|              starts, size, &startinpos, &endinpos, &exc, &s, |              starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
|              (PyObject **)&unicode, &outpos, &p)) |              &unicode, &outpos, &p)) | ||||||
|             goto onError; |             goto onError; | ||||||
|         if (s < e) |         if (s < e) | ||||||
|            goto restart; |            goto restart; | ||||||
|  | @ -1942,7 +1944,7 @@ PyObject *PyUnicode_DecodeUTF8Stateful(const char *s, | ||||||
| 	     errors, &errorHandler, | 	     errors, &errorHandler, | ||||||
| 	     "utf8", errmsg, | 	     "utf8", errmsg, | ||||||
| 	     starts, size, &startinpos, &endinpos, &exc, &s, | 	     starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
| 	     (PyObject **)&unicode, &outpos, &p)) | 	     &unicode, &outpos, &p)) | ||||||
| 	goto onError; | 	goto onError; | ||||||
|     } |     } | ||||||
|     if (consumed) |     if (consumed) | ||||||
|  | @ -2222,7 +2224,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s, | ||||||
|          errors, &errorHandler, |          errors, &errorHandler, | ||||||
|          "utf32", errmsg, |          "utf32", errmsg, | ||||||
|          starts, size, &startinpos, &endinpos, &exc, &s, |          starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
|          (PyObject **)&unicode, &outpos, &p)) |          &unicode, &outpos, &p)) | ||||||
| 	    goto onError; | 	    goto onError; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -2496,7 +2498,7 @@ PyUnicode_DecodeUTF16Stateful(const char *s, | ||||||
| 	         errors, &errorHandler, | 	         errors, &errorHandler, | ||||||
| 	         "utf16", errmsg, | 	         "utf16", errmsg, | ||||||
| 	         starts, size, &startinpos, &endinpos, &exc, (const char **)&q, | 	         starts, size, &startinpos, &endinpos, &exc, (const char **)&q, | ||||||
| 	         (PyObject **)&unicode, &outpos, &p)) | 	         &unicode, &outpos, &p)) | ||||||
| 	    goto onError; | 	    goto onError; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -2717,7 +2719,7 @@ PyObject *PyUnicode_DecodeUnicodeEscape(const char *s, | ||||||
|                     errors, &errorHandler, |                     errors, &errorHandler, | ||||||
|                     "unicodeescape", "end of string in escape sequence", |                     "unicodeescape", "end of string in escape sequence", | ||||||
|                     starts, size, &startinpos, &endinpos, &exc, &s, |                     starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
|                     (PyObject **)&v, &outpos, &p)) |                     &v, &outpos, &p)) | ||||||
|                     goto onError; |                     goto onError; | ||||||
|                 goto nextByte; |                 goto nextByte; | ||||||
|             } |             } | ||||||
|  | @ -2729,7 +2731,7 @@ PyObject *PyUnicode_DecodeUnicodeEscape(const char *s, | ||||||
|                         errors, &errorHandler, |                         errors, &errorHandler, | ||||||
|                         "unicodeescape", message, |                         "unicodeescape", message, | ||||||
|                         starts, size, &startinpos, &endinpos, &exc, &s, |                         starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
|                         (PyObject **)&v, &outpos, &p)) |                         &v, &outpos, &p)) | ||||||
|                         goto onError; |                         goto onError; | ||||||
|                     goto nextByte; |                     goto nextByte; | ||||||
|                 } |                 } | ||||||
|  | @ -2768,7 +2770,7 @@ PyObject *PyUnicode_DecodeUnicodeEscape(const char *s, | ||||||
|                     errors, &errorHandler, |                     errors, &errorHandler, | ||||||
|                     "unicodeescape", "illegal Unicode character", |                     "unicodeescape", "illegal Unicode character", | ||||||
|                     starts, size, &startinpos, &endinpos, &exc, &s, |                     starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
|                     (PyObject **)&v, &outpos, &p)) |                     &v, &outpos, &p)) | ||||||
|                     goto onError; |                     goto onError; | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|  | @ -2810,7 +2812,7 @@ PyObject *PyUnicode_DecodeUnicodeEscape(const char *s, | ||||||
|                 errors, &errorHandler, |                 errors, &errorHandler, | ||||||
|                 "unicodeescape", message, |                 "unicodeescape", message, | ||||||
|                 starts, size, &startinpos, &endinpos, &exc, &s, |                 starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
|                 (PyObject **)&v, &outpos, &p)) |                 &v, &outpos, &p)) | ||||||
|                 goto onError; |                 goto onError; | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|  | @ -2824,7 +2826,7 @@ PyObject *PyUnicode_DecodeUnicodeEscape(const char *s, | ||||||
|                     errors, &errorHandler, |                     errors, &errorHandler, | ||||||
|                     "unicodeescape", message, |                     "unicodeescape", message, | ||||||
|                     starts, size, &startinpos, &endinpos, &exc, &s, |                     starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
|                     (PyObject **)&v, &outpos, &p)) |                     &v, &outpos, &p)) | ||||||
|                     goto onError; |                     goto onError; | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|  | @ -3113,7 +3115,7 @@ PyObject *PyUnicode_DecodeRawUnicodeEscape(const char *s, | ||||||
| 		    errors, &errorHandler, | 		    errors, &errorHandler, | ||||||
| 		    "rawunicodeescape", "truncated \\uXXXX", | 		    "rawunicodeescape", "truncated \\uXXXX", | ||||||
| 		    starts, size, &startinpos, &endinpos, &exc, &s, | 		    starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
| 		    (PyObject **)&v, &outpos, &p)) | 		    &v, &outpos, &p)) | ||||||
| 		    goto onError; | 		    goto onError; | ||||||
| 		goto nextByte; | 		goto nextByte; | ||||||
| 	    } | 	    } | ||||||
|  | @ -3145,7 +3147,7 @@ PyObject *PyUnicode_DecodeRawUnicodeEscape(const char *s, | ||||||
|                     errors, &errorHandler, |                     errors, &errorHandler, | ||||||
|                     "rawunicodeescape", "\\Uxxxxxxxx out of range", |                     "rawunicodeescape", "\\Uxxxxxxxx out of range", | ||||||
| 		    starts, size, &startinpos, &endinpos, &exc, &s, | 		    starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
| 		    (PyObject **)&v, &outpos, &p)) | 		    &v, &outpos, &p)) | ||||||
| 		    goto onError; | 		    goto onError; | ||||||
|         } |         } | ||||||
| 	nextByte: | 	nextByte: | ||||||
|  | @ -3315,7 +3317,7 @@ PyObject *_PyUnicode_DecodeUnicodeInternal(const char *s, | ||||||
|                     errors, &errorHandler, |                     errors, &errorHandler, | ||||||
|                     "unicode_internal", reason, |                     "unicode_internal", reason, | ||||||
|                     starts, size, &startinpos, &endinpos, &exc, &s, |                     starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
|                     (PyObject **)&v, &outpos, &p)) { |                     &v, &outpos, &p)) { | ||||||
|                 goto onError; |                 goto onError; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | @ -3695,7 +3697,7 @@ PyObject *PyUnicode_DecodeASCII(const char *s, | ||||||
| 		 errors, &errorHandler, | 		 errors, &errorHandler, | ||||||
| 		 "ascii", "ordinal not in range(128)", | 		 "ascii", "ordinal not in range(128)", | ||||||
| 		 starts, size, &startinpos, &endinpos, &exc, &s, | 		 starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
| 		 (PyObject **)&v, &outpos, &p)) | 		 &v, &outpos, &p)) | ||||||
| 		goto onError; | 		goto onError; | ||||||
| 	} | 	} | ||||||
|     } |     } | ||||||
|  | @ -3996,7 +3998,7 @@ PyObject *PyUnicode_DecodeCharmap(const char *s, | ||||||
| 		     errors, &errorHandler, | 		     errors, &errorHandler, | ||||||
| 		     "charmap", "character maps to <undefined>", | 		     "charmap", "character maps to <undefined>", | ||||||
| 		     starts, size, &startinpos, &endinpos, &exc, &s, | 		     starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
| 		     (PyObject **)&v, &outpos, &p)) { | 		     &v, &outpos, &p)) { | ||||||
| 		    goto onError; | 		    goto onError; | ||||||
| 		} | 		} | ||||||
| 		continue; | 		continue; | ||||||
|  | @ -4046,7 +4048,7 @@ PyObject *PyUnicode_DecodeCharmap(const char *s, | ||||||
| 		     errors, &errorHandler, | 		     errors, &errorHandler, | ||||||
| 		     "charmap", "character maps to <undefined>", | 		     "charmap", "character maps to <undefined>", | ||||||
| 		     starts, size, &startinpos, &endinpos, &exc, &s, | 		     starts, size, &startinpos, &endinpos, &exc, &s, | ||||||
| 		     (PyObject **)&v, &outpos, &p)) { | 		     &v, &outpos, &p)) { | ||||||
| 		    Py_DECREF(x); | 		    Py_DECREF(x); | ||||||
| 		    goto onError; | 		    goto onError; | ||||||
| 		} | 		} | ||||||
|  | @ -4797,7 +4799,7 @@ int charmaptranslate_makespace(PyObject **outobj, Py_UNICODE **outp, | ||||||
| 	/* exponentially overallocate to minimize reallocations */ | 	/* exponentially overallocate to minimize reallocations */ | ||||||
| 	if (requiredsize < 2 * oldsize) | 	if (requiredsize < 2 * oldsize) | ||||||
| 	    requiredsize = 2 * oldsize; | 	    requiredsize = 2 * oldsize; | ||||||
| 	if (_PyUnicode_Resize(outobj, requiredsize) < 0) | 	if (PyUnicode_Resize(outobj, requiredsize) < 0) | ||||||
| 	    return -1; | 	    return -1; | ||||||
| 	*outp = PyUnicode_AS_UNICODE(*outobj) + outpos; | 	*outp = PyUnicode_AS_UNICODE(*outobj) + outpos; | ||||||
|     } |     } | ||||||
|  | @ -4976,7 +4978,7 @@ PyObject *PyUnicode_TranslateCharmap(const Py_UNICODE *p, | ||||||
|     /* Resize if we allocated to much */ |     /* Resize if we allocated to much */ | ||||||
|     respos = str-PyUnicode_AS_UNICODE(res); |     respos = str-PyUnicode_AS_UNICODE(res); | ||||||
|     if (respos<PyUnicode_GET_SIZE(res)) { |     if (respos<PyUnicode_GET_SIZE(res)) { | ||||||
| 	if (_PyUnicode_Resize(&res, respos) < 0) | 	if (PyUnicode_Resize(&res, respos) < 0) | ||||||
| 	    goto onError; | 	    goto onError; | ||||||
|     } |     } | ||||||
|     Py_XDECREF(exc); |     Py_XDECREF(exc); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alexandre Vassalotti
						Alexandre Vassalotti