[Python-checkins] gh-91102: Use Argument Clinic for EncodingMap (#31725)

JelleZijlstra webhook-mailer at python.org
Mon Apr 18 16:44:12 EDT 2022


https://github.com/python/cpython/commit/2f0fc521f48af0dcec86dfcc8d0bc91eebf974ee
commit: 2f0fc521f48af0dcec86dfcc8d0bc91eebf974ee
branch: main
author: Oleg Iarygin <oleg at arhadthedev.net>
committer: JelleZijlstra <jelle.zijlstra at gmail.com>
date: 2022-04-18T13:43:56-07:00
summary:

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

Co-authored-by: Jelle Zijlstra <jelle.zijlstra at gmail.com>

files:
A Misc/NEWS.d/next/Core and Builtins/2022-04-18-07-23-48.gh-issue-91102.vm-6g1.rst
M Objects/clinic/unicodeobject.c.h
M Objects/unicodeobject.c

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 0000000000000..5f3897e6dcd03
--- /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 803b5f2353f9e..b9892403a2036 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 @@ unicode_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
 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 6b05c37faabfc..d46a52cdb8965 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*



More information about the Python-checkins mailing list