Index: Include/pyerrors.h =================================================================== --- Include/pyerrors.h (révision 81870) +++ Include/pyerrors.h (copie de travail) @@ -288,6 +290,8 @@ PyObject *, const char *); PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( PyObject *, const char *); +PyAPI_FUNC(int) PyUnicodeTranslateError_SetReasonObject( + PyObject *, PyObject *); /* These APIs aren't really part of the error implementation, but Index: Objects/exceptions.c =================================================================== --- Objects/exceptions.c (révision 81870) +++ Objects/exceptions.c (copie de travail) @@ -1368,6 +1368,17 @@ } +int +PyUnicodeTranslateError_SetReasonObject(PyObject *exc, PyObject *reason) +{ + PyUnicodeErrorObject *self = (PyUnicodeErrorObject *)exc; + Py_CLEAR(self->reason); + Py_INCREF(reason); + self->reason = reason; + return 0; +} + + static int UnicodeError_clear(PyUnicodeErrorObject *self) { Index: Objects/unicodeobject.c =================================================================== --- Objects/unicodeobject.c (révision 81871) +++ Objects/unicodeobject.c (copie de travail) @@ -5442,10 +5522,11 @@ } /* create or adjust a UnicodeTranslateError */ -static void make_translate_exception(PyObject **exceptionObject, - const Py_UNICODE *unicode, Py_ssize_t size, - Py_ssize_t startpos, Py_ssize_t endpos, - const char *reason) +static void +make_translate_exception_object(PyObject **exceptionObject, + const Py_UNICODE *unicode, Py_ssize_t size, + Py_ssize_t startpos, Py_ssize_t endpos, + PyObject *reason) { if (*exceptionObject == NULL) { *exceptionObject = PyUnicodeTranslateError_Create( @@ -5456,7 +5537,7 @@ goto onError; if (PyUnicodeTranslateError_SetEnd(*exceptionObject, endpos)) goto onError; - if (PyUnicodeTranslateError_SetReason(*exceptionObject, reason)) + if (PyUnicodeTranslateError_SetReasonObject(*exceptionObject, reason)) goto onError; return; onError: @@ -5465,6 +5546,21 @@ } } +static void +make_translate_exception(PyObject **exceptionObject, + const Py_UNICODE *unicode, Py_ssize_t size, + Py_ssize_t startpos, Py_ssize_t endpos, + const char *reason) +{ + PyObject *reason_obj = PyUnicode_FromString(reason); + if (reason_obj == NULL) + return; + make_translate_exception_object( + exceptionObject, unicode, size, startpos, endpos, reason_obj); + Py_DECREF(reason_obj); + +} + /* raises a UnicodeTranslateError */ static void raise_translate_exception(PyObject **exceptionObject, const Py_UNICODE *unicode, Py_ssize_t size,