diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-04-18-07-23-48.gh-issue-91102.vm-6g1.rst b/Misc/NEWS.d/next/Core and Builtins/2022-04-18-07-23-48.gh-issue-91102.vm-6g1.rst new file mode 100644 index 00000000000..5f3897e6dcd --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2022-04-18-07-23-48.gh-issue-91102.vm-6g1.rst @@ -0,0 +1 @@ +Use Argument Clinic for :class:`EncodingMap`. Patch by Oleg Iarygin. diff --git a/Objects/clinic/unicodeobject.c.h b/Objects/clinic/unicodeobject.c.h index 803b5f2353f..b9892403a20 100644 --- a/Objects/clinic/unicodeobject.c.h +++ b/Objects/clinic/unicodeobject.c.h @@ -2,6 +2,24 @@ preserve [clinic start generated code]*/ +PyDoc_STRVAR(EncodingMap_size__doc__, +"size($self, /)\n" +"--\n" +"\n" +"Return the size (in bytes) of this object."); + +#define ENCODINGMAP_SIZE_METHODDEF \ + {"size", (PyCFunction)EncodingMap_size, METH_NOARGS, EncodingMap_size__doc__}, + +static PyObject * +EncodingMap_size_impl(struct encoding_map *self); + +static PyObject * +EncodingMap_size(struct encoding_map *self, PyObject *Py_UNUSED(ignored)) +{ + return EncodingMap_size_impl(self); +} + PyDoc_STRVAR(unicode_title__doc__, "title($self, /)\n" "--\n" @@ -1335,4 +1353,4 @@ skip_optional_pos: exit: return return_value; } -/*[clinic end generated code: output=c494bed46209961d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e8566b060f558f72 input=a9049054013a1b77]*/ diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 6b05c37faab..d46a52cdb89 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -397,6 +397,7 @@ static const unsigned char ascii_linebreak[] = { static int convert_uc(PyObject *obj, void *addr); +struct encoding_map; #include "clinic/unicodeobject.c.h" _Py_error_handler @@ -8331,6 +8332,11 @@ PyUnicode_DecodeCharmap(const char *s, /* Charmap encoding: the lookup table */ +/*[clinic input] +class EncodingMap "struct encoding_map *" "&EncodingMapType" +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=14e46bbb6c522d22]*/ + struct encoding_map { PyObject_HEAD unsigned char level1[32]; @@ -8338,62 +8344,32 @@ struct encoding_map { unsigned char level23[1]; }; -static PyObject* -encoding_map_size(PyObject *obj, PyObject* args) +/*[clinic input] +EncodingMap.size + +Return the size (in bytes) of this object. +[clinic start generated code]*/ + +static PyObject * +EncodingMap_size_impl(struct encoding_map *self) +/*[clinic end generated code: output=c4c969e4c99342a4 input=004ff13f26bb5366]*/ { - struct encoding_map *map = (struct encoding_map*)obj; - return PyLong_FromLong(sizeof(*map) - 1 + 16*map->count2 + - 128*map->count3); + return PyLong_FromLong((sizeof(*self) - 1) + 16*self->count2 + + 128*self->count3); } static PyMethodDef encoding_map_methods[] = { - {"size", encoding_map_size, METH_NOARGS, - PyDoc_STR("Return the size (in bytes) of this object") }, - { 0 } + ENCODINGMAP_SIZE_METHODDEF + {NULL, NULL} }; static PyTypeObject EncodingMapType = { PyVarObject_HEAD_INIT(NULL, 0) - "EncodingMap", /*tp_name*/ - sizeof(struct encoding_map), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + .tp_name = "EncodingMap", + .tp_basicsize = sizeof(struct encoding_map), /* methods */ - 0, /*tp_dealloc*/ - 0, /*tp_vectorcall_offset*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_as_async*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - encoding_map_methods, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ + .tp_flags = Py_TPFLAGS_DEFAULT, + .tp_methods = encoding_map_methods, }; PyObject*