diff options
author | orivej <[email protected]> | 2022-02-10 16:45:01 +0300 |
---|---|---|
committer | Daniil Cherednik <[email protected]> | 2022-02-10 16:45:01 +0300 |
commit | 2d37894b1b037cf24231090eda8589bbb44fb6fc (patch) | |
tree | be835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/tools/python3/src/Objects/methodobject.c | |
parent | 718c552901d703c502ccbefdfc3c9028d608b947 (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.c | 514 |
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. |