summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Iarygin <oleg@arhadthedev.net>2022-04-18 20:43:56 (GMT)
committerGitHub <noreply@github.com>2022-04-18 20:43:56 (GMT)
commit2f0fc521f48af0dcec86dfcc8d0bc91eebf974ee (patch)
treee82f31904d4f2ecfb6c61d202d2bab0643bdca1a
parentdbd9d75fedfebb215fe3e2b60249ac642cc8abf2 (diff)
downloadcpython-2f0fc521f48af0dcec86dfcc8d0bc91eebf974ee.zip
cpython-2f0fc521f48af0dcec86dfcc8d0bc91eebf974ee.tar.gz
cpython-2f0fc521f48af0dcec86dfcc8d0bc91eebf974ee.tar.bz2
gh-91102: Use Argument Clinic for EncodingMap (#31725)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-04-18-07-23-48.gh-issue-91102.vm-6g1.rst1
-rw-r--r--Objects/clinic/unicodeobject.c.h20
-rw-r--r--Objects/unicodeobject.c70
3 files changed, 43 insertions, 48 deletions
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 0000000..5f3897e
--- /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 803b5f2..b989240 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 6b05c37..d46a52c 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*