summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorLarry Hastings <larry@hastings.org>2014-01-28 13:00:08 (GMT)
committerLarry Hastings <larry@hastings.org>2014-01-28 13:00:08 (GMT)
commit581ee3618c756132359d98b6fc149ec7e7ca9ef9 (patch)
treefa211357051306722af3b064f5b095992105524c /Objects
parenteecbbad89b60c20641fa8dd1c12f52b3648408ea (diff)
downloadcpython-581ee3618c756132359d98b6fc149ec7e7ca9ef9.zip
cpython-581ee3618c756132359d98b6fc149ec7e7ca9ef9.tar.gz
cpython-581ee3618c756132359d98b6fc149ec7e7ca9ef9.tar.bz2
Issue #20326: Argument Clinic now uses a simple, unique signature to
annotate text signatures in docstrings, resulting in fewer false positives. "self" parameters are also explicitly marked, allowing inspect.Signature() to authoritatively detect (and skip) said parameters. Issue #20326: Argument Clinic now generates separate checksums for the input and output sections of the block, allowing external tools to verify that the input has not changed (and thus the output is not out-of-date).
Diffstat (limited to 'Objects')
-rw-r--r--Objects/descrobject.c24
-rw-r--r--Objects/dictobject.c10
-rw-r--r--Objects/methodobject.c8
-rw-r--r--Objects/typeobject.c144
-rw-r--r--Objects/unicodeobject.c6
5 files changed, 83 insertions, 109 deletions
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index ce1c71b..181cc51 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -353,17 +353,13 @@ wrapperdescr_call(PyWrapperDescrObject *descr, PyObject *args, PyObject *kwds)
static PyObject *
method_get_doc(PyMethodDescrObject *descr, void *closure)
{
- const char *name = descr->d_method->ml_name;
- const char *doc = descr->d_method->ml_doc;
- return _PyType_GetDocFromInternalDoc(name, doc);
+ return _PyType_GetDocFromInternalDoc(descr->d_method->ml_doc);
}
static PyObject *
method_get_text_signature(PyMethodDescrObject *descr, void *closure)
{
- const char *name = descr->d_method->ml_name;
- const char *doc = descr->d_method->ml_doc;
- return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+ return _PyType_GetTextSignatureFromInternalDoc(descr->d_method->ml_doc);
}
static PyObject *
@@ -470,17 +466,13 @@ static PyGetSetDef getset_getset[] = {
static PyObject *
wrapperdescr_get_doc(PyWrapperDescrObject *descr, void *closure)
{
- const char *name = descr->d_base->name;
- const char *doc = descr->d_base->doc;
- return _PyType_GetDocFromInternalDoc(name, doc);
+ return _PyType_GetDocFromInternalDoc(descr->d_base->doc);
}
static PyObject *
wrapperdescr_get_text_signature(PyWrapperDescrObject *descr, void *closure)
{
- const char *name = descr->d_base->name;
- const char *doc = descr->d_base->doc;
- return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+ return _PyType_GetTextSignatureFromInternalDoc(descr->d_base->doc);
}
static PyGetSetDef wrapperdescr_getset[] = {
@@ -1159,17 +1151,13 @@ wrapper_name(wrapperobject *wp)
static PyObject *
wrapper_doc(wrapperobject *wp, void *closure)
{
- const char *name = wp->descr->d_base->name;
- const char *doc = wp->descr->d_base->doc;
- return _PyType_GetDocFromInternalDoc(name, doc);
+ return _PyType_GetDocFromInternalDoc(wp->descr->d_base->doc);
}
static PyObject *
wrapper_text_signature(wrapperobject *wp, void *closure)
{
- const char *name = wp->descr->d_base->name;
- const char *doc = wp->descr->d_base->doc;
- return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+ return _PyType_GetTextSignatureFromInternalDoc(wp->descr->d_base->doc);
}
static PyObject *
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 2332e3f..2673817 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -72,7 +72,7 @@ to the combined-table form.
/*[clinic input]
class dict "PyDictObject *" "&PyDict_Type"
[clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=f157a5a0ce9589d6]*/
typedef struct {
/* Cached hash code of me_key. */
@@ -1702,7 +1702,7 @@ Returns a new dict with keys from iterable and values equal to value.
[clinic start generated code]*/
PyDoc_STRVAR(dict_fromkeys__doc__,
-"fromkeys(type, iterable, value=None)\n"
+"sig=($type, iterable, value=None)\n"
"Returns a new dict with keys from iterable and values equal to value.");
#define DICT_FROMKEYS_METHODDEF \
@@ -1730,7 +1730,7 @@ exit:
static PyObject *
dict_fromkeys_impl(PyTypeObject *type, PyObject *iterable, PyObject *value)
-/*[clinic end generated code: checksum=008269e1774a379b356841548c04061fd78a9542]*/
+/*[clinic end generated code: output=aff6e583703dbeba input=b85a667f9bf4669d]*/
{
PyObject *it; /* iter(seq) */
PyObject *key;
@@ -2209,7 +2209,7 @@ True if D has a key k, else False.
[clinic start generated code]*/
PyDoc_STRVAR(dict___contains____doc__,
-"__contains__(self, key)\n"
+"sig=($self, key)\n"
"True if D has a key k, else False.");
#define DICT___CONTAINS___METHODDEF \
@@ -2217,7 +2217,7 @@ PyDoc_STRVAR(dict___contains____doc__,
static PyObject *
dict___contains__(PyDictObject *self, PyObject *key)
-/*[clinic end generated code: checksum=744ca54369dda9815a596304087f1b37fafa5960]*/
+/*[clinic end generated code: output=c654684a6d880281 input=b852b2a19b51ab24]*/
{
register PyDictObject *mp = self;
Py_hash_t hash;
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index 227ad57..ead7443 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -182,17 +182,13 @@ static PyMethodDef meth_methods[] = {
static PyObject *
meth_get__text_signature__(PyCFunctionObject *m, void *closure)
{
- const char *name = m->m_ml->ml_name;
- const char *doc = m->m_ml->ml_doc;
- return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+ return _PyType_GetTextSignatureFromInternalDoc(m->m_ml->ml_doc);
}
static PyObject *
meth_get__doc__(PyCFunctionObject *m, void *closure)
{
- const char *name = m->m_ml->ml_name;
- const char *doc = m->m_ml->ml_doc;
- return _PyType_GetDocFromInternalDoc(name, doc);
+ return _PyType_GetDocFromInternalDoc(m->m_ml->ml_doc);
}
static PyObject *
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 08da4de..cbbb58a 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -60,18 +60,11 @@ slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
* otherwise returns NULL.
*/
static const char *
-find_signature(const char *name, const char *doc)
+find_signature(const char *doc)
{
- size_t length;
- if (!doc || !name)
- return NULL;
- length = strlen(name);
- if (strncmp(doc, name, length))
- return NULL;
- doc += length;
- if (*doc != '(')
- return NULL;
- return doc;
+ if (doc && !strncmp(doc, "sig=(", 5))
+ return doc + 4;
+ return NULL;
}
/*
@@ -94,9 +87,9 @@ skip_eols(const char *trace)
}
static const char *
-_PyType_DocWithoutSignature(const char *name, const char *internal_doc)
+_PyType_DocWithoutSignature(const char *internal_doc)
{
- const char *signature = find_signature(name, internal_doc);
+ const char *signature = find_signature(internal_doc);
if (signature)
return skip_eols(skip_signature(signature));
@@ -104,9 +97,9 @@ _PyType_DocWithoutSignature(const char *name, const char *internal_doc)
}
PyObject *
-_PyType_GetDocFromInternalDoc(const char *name, const char *internal_doc)
+_PyType_GetDocFromInternalDoc(const char *internal_doc)
{
- const char *doc = _PyType_DocWithoutSignature(name, internal_doc);
+ const char *doc = _PyType_DocWithoutSignature(internal_doc);
if (!doc) {
Py_INCREF(Py_None);
@@ -117,9 +110,9 @@ _PyType_GetDocFromInternalDoc(const char *name, const char *internal_doc)
}
PyObject *
-_PyType_GetTextSignatureFromInternalDoc(const char *name, const char *internal_doc)
+_PyType_GetTextSignatureFromInternalDoc(const char *internal_doc)
{
- const char *signature = find_signature(name, internal_doc);
+ const char *signature = find_signature(internal_doc);
const char *doc;
if (!signature) {
@@ -706,9 +699,7 @@ type_get_doc(PyTypeObject *type, void *context)
{
PyObject *result;
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE) && type->tp_doc != NULL) {
- const char *name = type->tp_name;
- const char *doc = type->tp_doc;
- return _PyType_GetDocFromInternalDoc(name, doc);
+ return _PyType_GetDocFromInternalDoc(type->tp_doc);
}
result = _PyDict_GetItemId(type->tp_dict, &PyId___doc__);
if (result == NULL) {
@@ -728,9 +719,7 @@ type_get_doc(PyTypeObject *type, void *context)
static PyObject *
type_get_text_signature(PyTypeObject *type, void *context)
{
- const char *name = type->tp_name;
- const char *doc = type->tp_doc;
- return _PyType_GetTextSignatureFromInternalDoc(name, doc);
+ return _PyType_GetTextSignatureFromInternalDoc(type->tp_doc);
}
static int
@@ -2608,7 +2597,7 @@ PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
/* need to make a copy of the docstring slot, which usually
points to a static string literal */
if (slot->slot == Py_tp_doc) {
- const char *old_doc = _PyType_DocWithoutSignature(spec->name, slot->pfunc);
+ const char *old_doc = _PyType_DocWithoutSignature(slot->pfunc);
size_t len = strlen(old_doc)+1;
char *tp_doc = PyObject_MALLOC(len);
if (tp_doc == NULL) {
@@ -3000,7 +2989,7 @@ static PyMethodDef type_methods[] = {
PyDoc_STRVAR(type_doc,
/* this text signature cannot be accurate yet. will fix. --larry */
-"type(object_or_name, bases, dict)\n"
+"sig=(object_or_name, bases, dict)\n"
"type(object) -> the object's type\n"
"type(name, bases, dict) -> a new type");
@@ -4196,7 +4185,7 @@ PyTypeObject PyBaseObject_Type = {
PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
- PyDoc_STR("object()\nThe most base type"), /* tp_doc */
+ PyDoc_STR("sig=()\nThe most base type"), /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
object_richcompare, /* tp_richcompare */
@@ -4663,7 +4652,7 @@ PyType_Ready(PyTypeObject *type)
*/
if (_PyDict_GetItemId(type->tp_dict, &PyId___doc__) == NULL) {
if (type->tp_doc != NULL) {
- const char *old_doc = _PyType_DocWithoutSignature(type->tp_name, type->tp_doc);
+ const char *old_doc = _PyType_DocWithoutSignature(type->tp_doc);
PyObject *doc = PyUnicode_FromString(old_doc);
if (doc == NULL)
goto error;
@@ -5325,8 +5314,9 @@ tp_new_wrapper(PyObject *self, PyObject *args, PyObject *kwds)
static struct PyMethodDef tp_new_methoddef[] = {
{"__new__", (PyCFunction)tp_new_wrapper, METH_VARARGS|METH_KEYWORDS,
- PyDoc_STR("T.__new__(S, ...) -> "
- "a new object with type S, a subtype of T")},
+ PyDoc_STR("sig=($type, *args, **kwargs)\n"
+ "Create and return a new object. "
+ "See help(type) for accurate signature.")},
{0}
};
@@ -6098,22 +6088,22 @@ typedef struct wrapperbase slotdef;
ETSLOT(NAME, as_number.SLOT, FUNCTION, WRAPPER, DOC)
#define UNSLOT(NAME, SLOT, FUNCTION, WRAPPER, DOC) \
ETSLOT(NAME, as_number.SLOT, FUNCTION, WRAPPER, \
- NAME "(self)\n" DOC)
+ "sig=($self)\n" DOC)
#define IBSLOT(NAME, SLOT, FUNCTION, WRAPPER, DOC) \
ETSLOT(NAME, as_number.SLOT, FUNCTION, WRAPPER, \
- NAME "(self, value)\nReturns self" DOC "value.")
+ "sig=($self, value)\nReturn self" DOC "value.")
#define BINSLOT(NAME, SLOT, FUNCTION, DOC) \
ETSLOT(NAME, as_number.SLOT, FUNCTION, wrap_binaryfunc_l, \
- NAME "(self, value)\nReturns self" DOC "value.")
+ "sig=($self, value)\nReturn self" DOC "value.")
#define RBINSLOT(NAME, SLOT, FUNCTION, DOC) \
ETSLOT(NAME, as_number.SLOT, FUNCTION, wrap_binaryfunc_r, \
- NAME "(self, value)\nReturns value" DOC "self.")
+ "sig=($self, value)\nReturn value" DOC "self.")
#define BINSLOTNOTINFIX(NAME, SLOT, FUNCTION, DOC) \
ETSLOT(NAME, as_number.SLOT, FUNCTION, wrap_binaryfunc_l, \
- NAME "(self, value)\n" DOC)
+ "sig=($self, value)\n" DOC)
#define RBINSLOTNOTINFIX(NAME, SLOT, FUNCTION, DOC) \
ETSLOT(NAME, as_number.SLOT, FUNCTION, wrap_binaryfunc_r, \
- NAME "(self, value)\n" DOC)
+ "sig=($self, value)\n" DOC)
static slotdef slotdefs[] = {
TPSLOT("__getattribute__", tp_getattr, NULL, NULL, ""),
@@ -6121,52 +6111,52 @@ static slotdef slotdefs[] = {
TPSLOT("__setattr__", tp_setattr, NULL, NULL, ""),
TPSLOT("__delattr__", tp_setattr, NULL, NULL, ""),
TPSLOT("__repr__", tp_repr, slot_tp_repr, wrap_unaryfunc,
- "__repr__(self)\nReturns repr(self)."),
+ "sig=($self)\nReturn repr(self)."),
TPSLOT("__hash__", tp_hash, slot_tp_hash, wrap_hashfunc,
- "__hash__(self)\nReturns hash(self)."),
+ "sig=($self)\nReturn hash(self)."),
FLSLOT("__call__", tp_call, slot_tp_call, (wrapperfunc)wrap_call,
- "__call__(self, *args, **kwargs)\nCalls self as a function.",
+ "sig=($self, *args, **kwargs)\nCall self as a function.",
PyWrapperFlag_KEYWORDS),
TPSLOT("__str__", tp_str, slot_tp_str, wrap_unaryfunc,
- "__str__(self)\nReturns str(self)."),
+ "sig=($self)\nReturn str(self)."),
TPSLOT("__getattribute__", tp_getattro, slot_tp_getattr_hook,
wrap_binaryfunc,
- "__getattribute__(self, name)\nReturns getattr(self, name)."),
+ "sig=($self, name)\nReturn getattr(self, name)."),
TPSLOT("__getattr__", tp_getattro, slot_tp_getattr_hook, NULL, ""),
TPSLOT("__setattr__", tp_setattro, slot_tp_setattro, wrap_setattr,
- "__setattr__(self, name, value)\nImplements setattr(self, name, value)."),
+ "sig=($self, name, value)\nImplement setattr(self, name, value)."),
TPSLOT("__delattr__", tp_setattro, slot_tp_setattro, wrap_delattr,
- "__delattr__(self, name)\nImplements delattr(self, name)."),
+ "sig=($self, name)\nImplement delattr(self, name)."),
TPSLOT("__lt__", tp_richcompare, slot_tp_richcompare, richcmp_lt,
- "__lt__(self, value)\nReturns self<value."),
+ "sig=($self, value)\nReturn self<value."),
TPSLOT("__le__", tp_richcompare, slot_tp_richcompare, richcmp_le,
- "__le__(self, value)\nReturns self<=value."),
+ "sig=($self, value)\nReturn self<=value."),
TPSLOT("__eq__", tp_richcompare, slot_tp_richcompare, richcmp_eq,
- "__eq__(self, value)\nReturns self==value."),
+ "sig=($self, value)\nReturn self==value."),
TPSLOT("__ne__", tp_richcompare, slot_tp_richcompare, richcmp_ne,
- "__ne__(self, value)\nReturns self!=value."),
+ "sig=($self, value)\nReturn self!=value."),
TPSLOT("__gt__", tp_richcompare, slot_tp_richcompare, richcmp_gt,
- "__gt__(self, value)\nReturns self>value."),
+ "sig=($self, value)\nReturn self>value."),
TPSLOT("__ge__", tp_richcompare, slot_tp_richcompare, richcmp_ge,
- "__ge__(self, value)\nReturns self>=value."),
+ "sig=($self, value)\nReturn self>=value."),
TPSLOT("__iter__", tp_iter, slot_tp_iter, wrap_unaryfunc,
- "__iter__(self)\nImplements iter(self)."),
+ "sig=($self)\nImplement iter(self)."),
TPSLOT("__next__", tp_iternext, slot_tp_iternext, wrap_next,
- "__next__(self)\nImplements next(self)."),
+ "sig=($self)\nImplement next(self)."),
TPSLOT("__get__", tp_descr_get, slot_tp_descr_get, wrap_descr_get,
- "__get__(self, instance, owner)\nCalled to get an attribute of instance, which is of type owner."),
+ "sig=($self, instance, owner)\nReturn an attribute of instance, which is of type owner."),
TPSLOT("__set__", tp_descr_set, slot_tp_descr_set, wrap_descr_set,
- "__set__(self, instance, value)\nSets an attribute of instance to value."),
+ "sig=($self, instance, value)\nSet an attribute of instance to value."),
TPSLOT("__delete__", tp_descr_set, slot_tp_descr_set,
wrap_descr_delete,
- "__delete__(instance)\nDeletes an attribute of instance."),
+ "sig=(instance)\nDelete an attribute of instance."),
FLSLOT("__init__", tp_init, slot_tp_init, (wrapperfunc)wrap_init,
- "__init__(self, *args, **kwargs)\n"
- "Initializes self. See help(type(self)) for accurate signature.",
+ "sig=($self, *args, **kwargs)\n"
+ "Initialize self. See help(type(self)) for accurate signature.",
PyWrapperFlag_KEYWORDS),
TPSLOT("__new__", tp_new, slot_tp_new, NULL,
- "__new__(cls, *args, **kwargs)\n"
- "Creates new object. See help(cls) for accurate signature."),
+ "sig=(type, *args, **kwargs)\n"
+ "Create and return new object. See help(type) for accurate signature."),
TPSLOT("__del__", tp_finalize, slot_tp_finalize, (wrapperfunc)wrap_del, ""),
BINSLOT("__add__", nb_add, slot_nb_add,
@@ -6186,13 +6176,13 @@ static slotdef slotdefs[] = {
RBINSLOT("__rmod__", nb_remainder, slot_nb_remainder,
"%"),
BINSLOTNOTINFIX("__divmod__", nb_divmod, slot_nb_divmod,
- "__divmod__(self, value)\nReturns divmod(self, value)."),
+ "Return divmod(self, value)."),
RBINSLOTNOTINFIX("__rdivmod__", nb_divmod, slot_nb_divmod,
- "__rdivmod__(self, value)\nReturns divmod(value, self)."),
+ "Return divmod(value, self)."),
NBSLOT("__pow__", nb_power, slot_nb_power, wrap_ternaryfunc,
- "__pow__(self, value, mod=None)\nReturns pow(self, value, mod)."),
+ "sig=($self, value, mod=None)\nReturn pow(self, value, mod)."),
NBSLOT("__rpow__", nb_power, slot_nb_power, wrap_ternaryfunc_r,
- "__rpow__(self, value, mod=None)\nReturns pow(value, self, mod)."),
+ "sig=($self, value, mod=None)\nReturn pow(value, self, mod)."),
UNSLOT("__neg__", nb_negative, slot_nb_negative, wrap_unaryfunc, "-self"),
UNSLOT("__pos__", nb_positive, slot_nb_positive, wrap_unaryfunc, "+self"),
UNSLOT("__abs__", nb_absolute, slot_nb_absolute, wrap_unaryfunc,
@@ -6243,48 +6233,48 @@ static slotdef slotdefs[] = {
IBSLOT("__itruediv__", nb_inplace_true_divide,
slot_nb_inplace_true_divide, wrap_binaryfunc, "/"),
NBSLOT("__index__", nb_index, slot_nb_index, wrap_unaryfunc,
- "__index__(self)\n"
- "Returns self converted to an integer, if self is suitable"
+ "sig=($self)\n"
+ "Return self converted to an integer, if self is suitable"
"for use as an index into a list."),
MPSLOT("__len__", mp_length, slot_mp_length, wrap_lenfunc,
- "__len__(self)\nReturns len(self)."),
+ "sig=($self)\nReturn len(self)."),
MPSLOT("__getitem__", mp_subscript, slot_mp_subscript,
wrap_binaryfunc,
- "__getitem__(self, key)\nReturns self[key]."),
+ "sig=($self, key)\nReturn self[key]."),
MPSLOT("__setitem__", mp_ass_subscript, slot_mp_ass_subscript,
wrap_objobjargproc,
- "__setitem__(self, key, value)\nSets self[key] to value."),
+ "sig=($self, key, value)\nSet self[key] to value."),
MPSLOT("__delitem__", mp_ass_subscript, slot_mp_ass_subscript,
wrap_delitem,
- "__delitem__(key)\nDeletes self[key]."),
+ "sig=(key)\nDelete self[key]."),
SQSLOT("__len__", sq_length, slot_sq_length, wrap_lenfunc,
- "__len__(self)\nReturns len(self)."),
+ "sig=($self)\nReturn len(self)."),
/* Heap types defining __add__/__mul__ have sq_concat/sq_repeat == NULL.
The logic in abstract.c always falls back to nb_add/nb_multiply in
this case. Defining both the nb_* and the sq_* slots to call the
user-defined methods has unexpected side-effects, as shown by
test_descr.notimplemented() */
SQSLOT("__add__", sq_concat, NULL, wrap_binaryfunc,
- "__add__(self, value)\nReturns self+value."),
+ "sig=($self, value)\nReturn self+value."),
SQSLOT("__mul__", sq_repeat, NULL, wrap_indexargfunc,
- "__mul__(self, value)\nReturns self*value.n"),
+ "sig=($self, value)\nReturn self*value.n"),
SQSLOT("__rmul__", sq_repeat, NULL, wrap_indexargfunc,
- "__rmul__(self, value)\nReturns self*value."),
+ "sig=($self, value)\nReturn self*value."),
SQSLOT("__getitem__", sq_item, slot_sq_item, wrap_sq_item,
- "__getitem__(self, key)\nReturns self[key]."),
+ "sig=($self, key)\nReturn self[key]."),
SQSLOT("__setitem__", sq_ass_item, slot_sq_ass_item, wrap_sq_setitem,
- "__setitem__(self, key, value)\nSets self[key] to value."),
+ "sig=($self, key, value)\nSet self[key] to value."),
SQSLOT("__delitem__", sq_ass_item, slot_sq_ass_item, wrap_sq_delitem,
- "__delitem__(self, key)\nDeletes self[key]."),
+ "sig=($self, key)\nDelete self[key]."),
SQSLOT("__contains__", sq_contains, slot_sq_contains, wrap_objobjproc,
- "__contains__(self, key)\nReturns key in self."),
+ "sig=($self, key)\nReturn key in self."),
SQSLOT("__iadd__", sq_inplace_concat, NULL,
wrap_binaryfunc,
- "__iadd__(self, value)\nImplements self+=value."),
+ "sig=($self, value)\nImplement self+=value."),
SQSLOT("__imul__", sq_inplace_repeat, NULL,
wrap_indexargfunc,
- "__imul__(self, value)\nImplements self*=value."),
+ "sig=($self, value)\nImplement self*=value."),
{NULL}
};
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 919b733..02359e5 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -50,7 +50,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
/*[clinic input]
class str "PyUnicodeObject *" "&PyUnicode_Type"
[clinic start generated code]*/
-/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=604e916854800fa8]*/
/* --- Globals ------------------------------------------------------------
@@ -12885,7 +12885,7 @@ must be a string, whose characters will be mapped to None in the result.
[clinic start generated code]*/
PyDoc_STRVAR(unicode_maketrans__doc__,
-"maketrans(x, y=None, z=None)\n"
+"sig=(x, y=None, z=None)\n"
"Return a translation table usable for str.translate().\n"
"\n"
"If there is only one argument, it must be a dictionary mapping Unicode\n"
@@ -12922,7 +12922,7 @@ exit:
static PyObject *
unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z)
-/*[clinic end generated code: checksum=90a3de8c494b304687e1e0d7e5fa8ba78eac6533]*/
+/*[clinic end generated code: output=ca001ac83ed32269 input=7bfbf529a293c6c5]*/
{
PyObject *new = NULL, *key, *value;
Py_ssize_t i = 0;