gh-91102: Use Argument Clinic for EncodingMap (#31725)

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
Oleg Iarygin 2022-04-18 23:43:56 +03:00 committed by GitHub
parent dbd9d75fed
commit 2f0fc521f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 48 deletions

View file

@ -0,0 +1 @@
Use Argument Clinic for :class:`EncodingMap`. Patch by Oleg Iarygin.

View file

@ -2,6 +2,24 @@
preserve preserve
[clinic start generated code]*/ [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__, PyDoc_STRVAR(unicode_title__doc__,
"title($self, /)\n" "title($self, /)\n"
"--\n" "--\n"
@ -1335,4 +1353,4 @@ skip_optional_pos:
exit: exit:
return return_value; return return_value;
} }
/*[clinic end generated code: output=c494bed46209961d input=a9049054013a1b77]*/ /*[clinic end generated code: output=e8566b060f558f72 input=a9049054013a1b77]*/

View file

@ -397,6 +397,7 @@ static const unsigned char ascii_linebreak[] = {
static int convert_uc(PyObject *obj, void *addr); static int convert_uc(PyObject *obj, void *addr);
struct encoding_map;
#include "clinic/unicodeobject.c.h" #include "clinic/unicodeobject.c.h"
_Py_error_handler _Py_error_handler
@ -8331,6 +8332,11 @@ PyUnicode_DecodeCharmap(const char *s,
/* Charmap encoding: the lookup table */ /* 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 { struct encoding_map {
PyObject_HEAD PyObject_HEAD
unsigned char level1[32]; unsigned char level1[32];
@ -8338,62 +8344,32 @@ struct encoding_map {
unsigned char level23[1]; unsigned char level23[1];
}; };
static PyObject* /*[clinic input]
encoding_map_size(PyObject *obj, PyObject* args) 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(*self) - 1) + 16*self->count2 +
return PyLong_FromLong(sizeof(*map) - 1 + 16*map->count2 + 128*self->count3);
128*map->count3);
} }
static PyMethodDef encoding_map_methods[] = { static PyMethodDef encoding_map_methods[] = {
{"size", encoding_map_size, METH_NOARGS, ENCODINGMAP_SIZE_METHODDEF
PyDoc_STR("Return the size (in bytes) of this object") }, {NULL, NULL}
{ 0 }
}; };
static PyTypeObject EncodingMapType = { static PyTypeObject EncodingMapType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"EncodingMap", /*tp_name*/ .tp_name = "EncodingMap",
sizeof(struct encoding_map), /*tp_basicsize*/ .tp_basicsize = sizeof(struct encoding_map),
0, /*tp_itemsize*/
/* methods */ /* methods */
0, /*tp_dealloc*/ .tp_flags = Py_TPFLAGS_DEFAULT,
0, /*tp_vectorcall_offset*/ .tp_methods = encoding_map_methods,
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*/
}; };
PyObject* PyObject*