summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Objects/methodobject.c
diff options
context:
space:
mode:
authororivej <[email protected]>2022-02-10 16:45:01 +0300
committerDaniil Cherednik <[email protected]>2022-02-10 16:45:01 +0300
commit2d37894b1b037cf24231090eda8589bbb44fb6fc (patch)
treebe835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/tools/python3/src/Objects/methodobject.c
parent718c552901d703c502ccbefdfc3c9028d608b947 (diff)
Restoring authorship annotation for <[email protected]>. Commit 2 of 2.
Diffstat (limited to 'contrib/tools/python3/src/Objects/methodobject.c')
-rw-r--r--contrib/tools/python3/src/Objects/methodobject.c514
1 files changed, 257 insertions, 257 deletions
diff --git a/contrib/tools/python3/src/Objects/methodobject.c b/contrib/tools/python3/src/Objects/methodobject.c
index 215e9a49f42..2df63cfdf6a 100644
--- a/contrib/tools/python3/src/Objects/methodobject.c
+++ b/contrib/tools/python3/src/Objects/methodobject.c
@@ -1,18 +1,18 @@
-
-/* Method object implementation */
-
-#include "Python.h"
+
+/* Method object implementation */
+
+#include "Python.h"
#include "pycore_ceval.h" // _Py_EnterRecursiveCall()
#include "pycore_object.h"
#include "pycore_pyerrors.h"
#include "pycore_pystate.h" // _PyThreadState_GET()
#include "structmember.h" // PyMemberDef
-
-/* undefine macro trampoline to PyCFunction_NewEx */
-#undef PyCFunction_New
+
+/* undefine macro trampoline to PyCFunction_NewEx */
+#undef PyCFunction_New
/* undefine macro trampoline to PyCMethod_New */
#undef PyCFunction_NewEx
-
+
/* Forward declarations */
static PyObject * cfunction_vectorcall_FASTCALL(
PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
@@ -29,14 +29,14 @@ static PyObject * cfunction_call(
PyObject *
-PyCFunction_New(PyMethodDef *ml, PyObject *self)
-{
- return PyCFunction_NewEx(ml, self, NULL);
-}
-
-PyObject *
-PyCFunction_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module)
-{
+PyCFunction_New(PyMethodDef *ml, PyObject *self)
+{
+ return PyCFunction_NewEx(ml, self, NULL);
+}
+
+PyObject *
+PyCFunction_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module)
+{
return PyCMethod_New(ml, self, module, NULL);
}
@@ -98,53 +98,53 @@ PyCMethod_New(PyMethodDef *ml, PyObject *self, PyObject *module, PyTypeObject *c
"but no METH_METHOD flag");
return NULL;
}
- op = PyObject_GC_New(PyCFunctionObject, &PyCFunction_Type);
+ op = PyObject_GC_New(PyCFunctionObject, &PyCFunction_Type);
if (op == NULL) {
- return NULL;
+ return NULL;
}
- }
-
- op->m_weakreflist = NULL;
- op->m_ml = ml;
- Py_XINCREF(self);
- op->m_self = self;
- Py_XINCREF(module);
- op->m_module = module;
+ }
+
+ op->m_weakreflist = NULL;
+ op->m_ml = ml;
+ Py_XINCREF(self);
+ op->m_self = self;
+ Py_XINCREF(module);
+ op->m_module = module;
op->vectorcall = vectorcall;
- _PyObject_GC_TRACK(op);
- return (PyObject *)op;
-}
-
-PyCFunction
-PyCFunction_GetFunction(PyObject *op)
-{
- if (!PyCFunction_Check(op)) {
- PyErr_BadInternalCall();
- return NULL;
- }
- return PyCFunction_GET_FUNCTION(op);
-}
-
-PyObject *
-PyCFunction_GetSelf(PyObject *op)
-{
- if (!PyCFunction_Check(op)) {
- PyErr_BadInternalCall();
- return NULL;
- }
- return PyCFunction_GET_SELF(op);
-}
-
-int
-PyCFunction_GetFlags(PyObject *op)
-{
- if (!PyCFunction_Check(op)) {
- PyErr_BadInternalCall();
- return -1;
- }
- return PyCFunction_GET_FLAGS(op);
-}
-
+ _PyObject_GC_TRACK(op);
+ return (PyObject *)op;
+}
+
+PyCFunction
+PyCFunction_GetFunction(PyObject *op)
+{
+ if (!PyCFunction_Check(op)) {
+ PyErr_BadInternalCall();
+ return NULL;
+ }
+ return PyCFunction_GET_FUNCTION(op);
+}
+
+PyObject *
+PyCFunction_GetSelf(PyObject *op)
+{
+ if (!PyCFunction_Check(op)) {
+ PyErr_BadInternalCall();
+ return NULL;
+ }
+ return PyCFunction_GET_SELF(op);
+}
+
+int
+PyCFunction_GetFlags(PyObject *op)
+{
+ if (!PyCFunction_Check(op)) {
+ PyErr_BadInternalCall();
+ return -1;
+ }
+ return PyCFunction_GET_FLAGS(op);
+}
+
PyTypeObject *
PyCMethod_GetClass(PyObject *op)
{
@@ -155,228 +155,228 @@ PyCMethod_GetClass(PyObject *op)
return PyCFunction_GET_CLASS(op);
}
-/* Methods (the standard built-in methods, that is) */
-
-static void
-meth_dealloc(PyCFunctionObject *m)
-{
+/* Methods (the standard built-in methods, that is) */
+
+static void
+meth_dealloc(PyCFunctionObject *m)
+{
// The Py_TRASHCAN mechanism requires that we be able to
// call PyObject_GC_UnTrack twice on an object.
PyObject_GC_UnTrack(m);
Py_TRASHCAN_BEGIN(m, meth_dealloc);
- if (m->m_weakreflist != NULL) {
- PyObject_ClearWeakRefs((PyObject*) m);
- }
+ if (m->m_weakreflist != NULL) {
+ PyObject_ClearWeakRefs((PyObject*) m);
+ }
// Dereference class before m_self: PyCFunction_GET_CLASS accesses
// PyMethodDef m_ml, which could be kept alive by m_self
Py_XDECREF(PyCFunction_GET_CLASS(m));
- Py_XDECREF(m->m_self);
- Py_XDECREF(m->m_module);
+ Py_XDECREF(m->m_self);
+ Py_XDECREF(m->m_module);
PyObject_GC_Del(m);
Py_TRASHCAN_END;
-}
-
-static PyObject *
+}
+
+static PyObject *
meth_reduce(PyCFunctionObject *m, PyObject *Py_UNUSED(ignored))
-{
- _Py_IDENTIFIER(getattr);
-
- if (m->m_self == NULL || PyModule_Check(m->m_self))
- return PyUnicode_FromString(m->m_ml->ml_name);
-
- return Py_BuildValue("N(Os)", _PyEval_GetBuiltinId(&PyId_getattr),
- m->m_self, m->m_ml->ml_name);
-}
-
-static PyMethodDef meth_methods[] = {
- {"__reduce__", (PyCFunction)meth_reduce, METH_NOARGS, NULL},
- {NULL, NULL}
-};
-
-static PyObject *
-meth_get__text_signature__(PyCFunctionObject *m, void *closure)
-{
- return _PyType_GetTextSignatureFromInternalDoc(m->m_ml->ml_name, m->m_ml->ml_doc);
-}
-
-static PyObject *
-meth_get__doc__(PyCFunctionObject *m, void *closure)
-{
- return _PyType_GetDocFromInternalDoc(m->m_ml->ml_name, m->m_ml->ml_doc);
-}
-
-static PyObject *
-meth_get__name__(PyCFunctionObject *m, void *closure)
-{
- return PyUnicode_FromString(m->m_ml->ml_name);
-}
-
-static PyObject *
-meth_get__qualname__(PyCFunctionObject *m, void *closure)
-{
- /* If __self__ is a module or NULL, return m.__name__
- (e.g. len.__qualname__ == 'len')
-
- If __self__ is a type, return m.__self__.__qualname__ + '.' + m.__name__
- (e.g. dict.fromkeys.__qualname__ == 'dict.fromkeys')
-
- Otherwise return type(m.__self__).__qualname__ + '.' + m.__name__
- (e.g. [].append.__qualname__ == 'list.append') */
- PyObject *type, *type_qualname, *res;
- _Py_IDENTIFIER(__qualname__);
-
- if (m->m_self == NULL || PyModule_Check(m->m_self))
- return PyUnicode_FromString(m->m_ml->ml_name);
-
- type = PyType_Check(m->m_self) ? m->m_self : (PyObject*)Py_TYPE(m->m_self);
-
- type_qualname = _PyObject_GetAttrId(type, &PyId___qualname__);
- if (type_qualname == NULL)
- return NULL;
-
- if (!PyUnicode_Check(type_qualname)) {
- PyErr_SetString(PyExc_TypeError, "<method>.__class__."
- "__qualname__ is not a unicode object");
- Py_XDECREF(type_qualname);
- return NULL;
- }
-
- res = PyUnicode_FromFormat("%S.%s", type_qualname, m->m_ml->ml_name);
- Py_DECREF(type_qualname);
- return res;
-}
-
-static int
-meth_traverse(PyCFunctionObject *m, visitproc visit, void *arg)
-{
+{
+ _Py_IDENTIFIER(getattr);
+
+ if (m->m_self == NULL || PyModule_Check(m->m_self))
+ return PyUnicode_FromString(m->m_ml->ml_name);
+
+ return Py_BuildValue("N(Os)", _PyEval_GetBuiltinId(&PyId_getattr),
+ m->m_self, m->m_ml->ml_name);
+}
+
+static PyMethodDef meth_methods[] = {
+ {"__reduce__", (PyCFunction)meth_reduce, METH_NOARGS, NULL},
+ {NULL, NULL}
+};
+
+static PyObject *
+meth_get__text_signature__(PyCFunctionObject *m, void *closure)
+{
+ return _PyType_GetTextSignatureFromInternalDoc(m->m_ml->ml_name, m->m_ml->ml_doc);
+}
+
+static PyObject *
+meth_get__doc__(PyCFunctionObject *m, void *closure)
+{
+ return _PyType_GetDocFromInternalDoc(m->m_ml->ml_name, m->m_ml->ml_doc);
+}
+
+static PyObject *
+meth_get__name__(PyCFunctionObject *m, void *closure)
+{
+ return PyUnicode_FromString(m->m_ml->ml_name);
+}
+
+static PyObject *
+meth_get__qualname__(PyCFunctionObject *m, void *closure)
+{
+ /* If __self__ is a module or NULL, return m.__name__
+ (e.g. len.__qualname__ == 'len')
+
+ If __self__ is a type, return m.__self__.__qualname__ + '.' + m.__name__
+ (e.g. dict.fromkeys.__qualname__ == 'dict.fromkeys')
+
+ Otherwise return type(m.__self__).__qualname__ + '.' + m.__name__
+ (e.g. [].append.__qualname__ == 'list.append') */
+ PyObject *type, *type_qualname, *res;
+ _Py_IDENTIFIER(__qualname__);
+
+ if (m->m_self == NULL || PyModule_Check(m->m_self))
+ return PyUnicode_FromString(m->m_ml->ml_name);
+
+ type = PyType_Check(m->m_self) ? m->m_self : (PyObject*)Py_TYPE(m->m_self);
+
+ type_qualname = _PyObject_GetAttrId(type, &PyId___qualname__);
+ if (type_qualname == NULL)
+ return NULL;
+
+ if (!PyUnicode_Check(type_qualname)) {
+ PyErr_SetString(PyExc_TypeError, "<method>.__class__."
+ "__qualname__ is not a unicode object");
+ Py_XDECREF(type_qualname);
+ return NULL;
+ }
+
+ res = PyUnicode_FromFormat("%S.%s", type_qualname, m->m_ml->ml_name);
+ Py_DECREF(type_qualname);
+ return res;
+}
+
+static int
+meth_traverse(PyCFunctionObject *m, visitproc visit, void *arg)
+{
Py_VISIT(PyCFunction_GET_CLASS(m));
- Py_VISIT(m->m_self);
- Py_VISIT(m->m_module);
- return 0;
-}
-
-static PyObject *
-meth_get__self__(PyCFunctionObject *m, void *closure)
-{
- PyObject *self;
-
- self = PyCFunction_GET_SELF(m);
- if (self == NULL)
- self = Py_None;
- Py_INCREF(self);
- return self;
-}
-
-static PyGetSetDef meth_getsets [] = {
- {"__doc__", (getter)meth_get__doc__, NULL, NULL},
- {"__name__", (getter)meth_get__name__, NULL, NULL},
- {"__qualname__", (getter)meth_get__qualname__, NULL, NULL},
- {"__self__", (getter)meth_get__self__, NULL, NULL},
- {"__text_signature__", (getter)meth_get__text_signature__, NULL, NULL},
- {0}
-};
-
-#define OFF(x) offsetof(PyCFunctionObject, x)
-
-static PyMemberDef meth_members[] = {
+ Py_VISIT(m->m_self);
+ Py_VISIT(m->m_module);
+ return 0;
+}
+
+static PyObject *
+meth_get__self__(PyCFunctionObject *m, void *closure)
+{
+ PyObject *self;
+
+ self = PyCFunction_GET_SELF(m);
+ if (self == NULL)
+ self = Py_None;
+ Py_INCREF(self);
+ return self;
+}
+
+static PyGetSetDef meth_getsets [] = {
+ {"__doc__", (getter)meth_get__doc__, NULL, NULL},
+ {"__name__", (getter)meth_get__name__, NULL, NULL},
+ {"__qualname__", (getter)meth_get__qualname__, NULL, NULL},
+ {"__self__", (getter)meth_get__self__, NULL, NULL},
+ {"__text_signature__", (getter)meth_get__text_signature__, NULL, NULL},
+ {0}
+};
+
+#define OFF(x) offsetof(PyCFunctionObject, x)
+
+static PyMemberDef meth_members[] = {
{"__module__", T_OBJECT, OFF(m_module), 0},
- {NULL}
-};
-
-static PyObject *
-meth_repr(PyCFunctionObject *m)
-{
- if (m->m_self == NULL || PyModule_Check(m->m_self))
- return PyUnicode_FromFormat("<built-in function %s>",
- m->m_ml->ml_name);
- return PyUnicode_FromFormat("<built-in method %s of %s object at %p>",
- m->m_ml->ml_name,
+ {NULL}
+};
+
+static PyObject *
+meth_repr(PyCFunctionObject *m)
+{
+ if (m->m_self == NULL || PyModule_Check(m->m_self))
+ return PyUnicode_FromFormat("<built-in function %s>",
+ m->m_ml->ml_name);
+ return PyUnicode_FromFormat("<built-in method %s of %s object at %p>",
+ m->m_ml->ml_name,
Py_TYPE(m->m_self)->tp_name,
- m->m_self);
-}
-
-static PyObject *
-meth_richcompare(PyObject *self, PyObject *other, int op)
-{
- PyCFunctionObject *a, *b;
- PyObject *res;
- int eq;
-
- if ((op != Py_EQ && op != Py_NE) ||
- !PyCFunction_Check(self) ||
- !PyCFunction_Check(other))
- {
- Py_RETURN_NOTIMPLEMENTED;
- }
- a = (PyCFunctionObject *)self;
- b = (PyCFunctionObject *)other;
- eq = a->m_self == b->m_self;
- if (eq)
- eq = a->m_ml->ml_meth == b->m_ml->ml_meth;
- if (op == Py_EQ)
- res = eq ? Py_True : Py_False;
- else
- res = eq ? Py_False : Py_True;
- Py_INCREF(res);
- return res;
-}
-
-static Py_hash_t
-meth_hash(PyCFunctionObject *a)
-{
- Py_hash_t x, y;
+ m->m_self);
+}
+
+static PyObject *
+meth_richcompare(PyObject *self, PyObject *other, int op)
+{
+ PyCFunctionObject *a, *b;
+ PyObject *res;
+ int eq;
+
+ if ((op != Py_EQ && op != Py_NE) ||
+ !PyCFunction_Check(self) ||
+ !PyCFunction_Check(other))
+ {
+ Py_RETURN_NOTIMPLEMENTED;
+ }
+ a = (PyCFunctionObject *)self;
+ b = (PyCFunctionObject *)other;
+ eq = a->m_self == b->m_self;
+ if (eq)
+ eq = a->m_ml->ml_meth == b->m_ml->ml_meth;
+ if (op == Py_EQ)
+ res = eq ? Py_True : Py_False;
+ else
+ res = eq ? Py_False : Py_True;
+ Py_INCREF(res);
+ return res;
+}
+
+static Py_hash_t
+meth_hash(PyCFunctionObject *a)
+{
+ Py_hash_t x, y;
x = _Py_HashPointer(a->m_self);
- y = _Py_HashPointer((void*)(a->m_ml->ml_meth));
- x ^= y;
- if (x == -1)
- x = -2;
- return x;
-}
-
-
-PyTypeObject PyCFunction_Type = {
- PyVarObject_HEAD_INIT(&PyType_Type, 0)
- "builtin_function_or_method",
- sizeof(PyCFunctionObject),
- 0,
- (destructor)meth_dealloc, /* tp_dealloc */
+ y = _Py_HashPointer((void*)(a->m_ml->ml_meth));
+ x ^= y;
+ if (x == -1)
+ x = -2;
+ return x;
+}
+
+
+PyTypeObject PyCFunction_Type = {
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
+ "builtin_function_or_method",
+ sizeof(PyCFunctionObject),
+ 0,
+ (destructor)meth_dealloc, /* tp_dealloc */
offsetof(PyCFunctionObject, vectorcall), /* tp_vectorcall_offset */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
0, /* tp_as_async */
- (reprfunc)meth_repr, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- (hashfunc)meth_hash, /* tp_hash */
+ (reprfunc)meth_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ (hashfunc)meth_hash, /* tp_hash */
cfunction_call, /* tp_call */
- 0, /* tp_str */
- PyObject_GenericGetAttr, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
+ 0, /* tp_str */
+ PyObject_GenericGetAttr, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
Py_TPFLAGS_HAVE_VECTORCALL, /* tp_flags */
- 0, /* tp_doc */
- (traverseproc)meth_traverse, /* tp_traverse */
- 0, /* tp_clear */
- meth_richcompare, /* tp_richcompare */
- offsetof(PyCFunctionObject, m_weakreflist), /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- meth_methods, /* tp_methods */
- meth_members, /* tp_members */
- meth_getsets, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
-};
-
+ 0, /* tp_doc */
+ (traverseproc)meth_traverse, /* tp_traverse */
+ 0, /* tp_clear */
+ meth_richcompare, /* tp_richcompare */
+ offsetof(PyCFunctionObject, m_weakreflist), /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ meth_methods, /* tp_methods */
+ meth_members, /* tp_members */
+ meth_getsets, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+};
+
PyTypeObject PyCMethod_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
.tp_name = "builtin_method",
.tp_basicsize = sizeof(PyCMethodObject),
.tp_base = &PyCFunction_Type,
};
-
+
/* Vectorcall functions for each of the PyCFunction calling conventions,
* except for METH_VARARGS (possibly combined with METH_KEYWORDS) which
* doesn't use vectorcall.