From f8d7d41507d8c0855b58c9be14011381d03c5cde Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 23 Oct 2016 15:12:25 +0300 Subject: [PATCH] Issue #28511: Use the "U" format instead of "O!" in PyArg_Parse*. --- Modules/_datetimemodule.c | 5 ++--- Modules/clinic/unicodedata.c.h | 6 +++--- Modules/unicodedata.c | 7 ++----- Objects/exceptions.c | 33 ++++++++++----------------------- Objects/unicodeobject.c | 6 +++--- 5 files changed, 20 insertions(+), 37 deletions(-) diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 5ddf6504c57..cced71cd9ca 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3243,9 +3243,8 @@ timezone_new(PyTypeObject *type, PyObject *args, PyObject *kw) { PyObject *offset; PyObject *name = NULL; - if (PyArg_ParseTupleAndKeywords(args, kw, "O!|O!:timezone", timezone_kws, - &PyDateTime_DeltaType, &offset, - &PyUnicode_Type, &name)) + if (PyArg_ParseTupleAndKeywords(args, kw, "O!|U:timezone", timezone_kws, + &PyDateTime_DeltaType, &offset, &name)) return new_timezone(offset, name); return NULL; diff --git a/Modules/clinic/unicodedata.c.h b/Modules/clinic/unicodedata.c.h index d481ccbe643..e8a73b9c47d 100644 --- a/Modules/clinic/unicodedata.c.h +++ b/Modules/clinic/unicodedata.c.h @@ -306,8 +306,8 @@ unicodedata_UCD_normalize(PyObject *self, PyObject *args) const char *form; PyObject *input; - if (!PyArg_ParseTuple(args, "sO!:normalize", - &form, &PyUnicode_Type, &input)) { + if (!PyArg_ParseTuple(args, "sU:normalize", + &form, &input)) { goto exit; } return_value = unicodedata_UCD_normalize_impl(self, form, input); @@ -379,4 +379,4 @@ unicodedata_UCD_lookup(PyObject *self, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=5313ce129da87b2f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=07e93c267323a576 input=a9049054013a1b77]*/ diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index 9e71e018e21..fbe811e807a 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -808,7 +808,7 @@ unicodedata.UCD.normalize self: self form: str - unistr as input: object(subclass_of='&PyUnicode_Type') + unistr as input: unicode / Return the normal form 'form' for the Unicode string unistr. @@ -819,11 +819,8 @@ Valid values for form are 'NFC', 'NFKC', 'NFD', and 'NFKD'. static PyObject * unicodedata_UCD_normalize_impl(PyObject *self, const char *form, PyObject *input) -/*[clinic end generated code: output=62d1f8870027efdc input=cd092e631cf11883]*/ +/*[clinic end generated code: output=62d1f8870027efdc input=1744c55f4ab79bf0]*/ { - if (PyUnicode_READY(input) == -1) - return NULL; - if (PyUnicode_GET_LENGTH(input) == 0) { /* Special case empty input strings, since resizing them later would cause internal errors. */ diff --git a/Objects/exceptions.c b/Objects/exceptions.c index bc0264a5e95..57a786c0220 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -1820,18 +1820,10 @@ UnicodeEncodeError_init(PyObject *self, PyObject *args, PyObject *kwds) Py_CLEAR(err->object); Py_CLEAR(err->reason); - if (!PyArg_ParseTuple(args, "O!O!nnO!", - &PyUnicode_Type, &err->encoding, - &PyUnicode_Type, &err->object, - &err->start, - &err->end, - &PyUnicode_Type, &err->reason)) { - err->encoding = err->object = err->reason = NULL; - return -1; - } - - if (PyUnicode_READY(err->object) < -1) { - err->encoding = NULL; + if (!PyArg_ParseTuple(args, "UUnnU", + &err->encoding, &err->object, + &err->start, &err->end, &err->reason)) { + err->encoding = err->object = err->reason = NULL; return -1; } @@ -1935,12 +1927,9 @@ UnicodeDecodeError_init(PyObject *self, PyObject *args, PyObject *kwds) Py_CLEAR(ude->object); Py_CLEAR(ude->reason); - if (!PyArg_ParseTuple(args, "O!OnnO!", - &PyUnicode_Type, &ude->encoding, - &ude->object, - &ude->start, - &ude->end, - &PyUnicode_Type, &ude->reason)) { + if (!PyArg_ParseTuple(args, "UOnnU", + &ude->encoding, &ude->object, + &ude->start, &ude->end, &ude->reason)) { ude->encoding = ude->object = ude->reason = NULL; return -1; } @@ -2050,11 +2039,9 @@ UnicodeTranslateError_init(PyUnicodeErrorObject *self, PyObject *args, Py_CLEAR(self->object); Py_CLEAR(self->reason); - if (!PyArg_ParseTuple(args, "O!nnO!", - &PyUnicode_Type, &self->object, - &self->start, - &self->end, - &PyUnicode_Type, &self->reason)) { + if (!PyArg_ParseTuple(args, "UnnU", + &self->object, + &self->start, &self->end, &self->reason)) { self->object = self->reason = NULL; return -1; } diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index af95bb6b4a5..6ab691ff25a 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -8621,7 +8621,7 @@ unicode_translate_call_errorhandler(const char *errors, Py_ssize_t startpos, Py_ssize_t endpos, Py_ssize_t *newpos) { - static const char *argparse = "O!n;translating error handler must return (str, int) tuple"; + static const char *argparse = "Un;translating error handler must return (str, int) tuple"; Py_ssize_t i_newpos; PyObject *restuple; @@ -8643,11 +8643,11 @@ unicode_translate_call_errorhandler(const char *errors, if (restuple == NULL) return NULL; if (!PyTuple_Check(restuple)) { - PyErr_SetString(PyExc_TypeError, &argparse[4]); + PyErr_SetString(PyExc_TypeError, &argparse[3]); Py_DECREF(restuple); return NULL; } - if (!PyArg_ParseTuple(restuple, argparse, &PyUnicode_Type, + if (!PyArg_ParseTuple(restuple, argparse, &resunicode, &i_newpos)) { Py_DECREF(restuple); return NULL;