bpo-20185: Convert typeobject.c to Argument Clinic. (#544)
Based on patch by Vajrasky Kok.
This commit is contained in:
parent
bdf6b910f9
commit
5c643a028e
|
@ -0,0 +1,259 @@
|
||||||
|
/*[clinic input]
|
||||||
|
preserve
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
|
PyDoc_STRVAR(type___instancecheck____doc__,
|
||||||
|
"__instancecheck__($self, instance, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Check if an object is an instance.");
|
||||||
|
|
||||||
|
#define TYPE___INSTANCECHECK___METHODDEF \
|
||||||
|
{"__instancecheck__", (PyCFunction)type___instancecheck__, METH_O, type___instancecheck____doc__},
|
||||||
|
|
||||||
|
static int
|
||||||
|
type___instancecheck___impl(PyTypeObject *self, PyObject *instance);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type___instancecheck__(PyTypeObject *self, PyObject *instance)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
int _return_value;
|
||||||
|
|
||||||
|
_return_value = type___instancecheck___impl(self, instance);
|
||||||
|
if ((_return_value == -1) && PyErr_Occurred()) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
return_value = PyBool_FromLong((long)_return_value);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(type___subclasscheck____doc__,
|
||||||
|
"__subclasscheck__($self, subclass, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Check if a class is a subclass.");
|
||||||
|
|
||||||
|
#define TYPE___SUBCLASSCHECK___METHODDEF \
|
||||||
|
{"__subclasscheck__", (PyCFunction)type___subclasscheck__, METH_O, type___subclasscheck____doc__},
|
||||||
|
|
||||||
|
static int
|
||||||
|
type___subclasscheck___impl(PyTypeObject *self, PyObject *subclass);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type___subclasscheck__(PyTypeObject *self, PyObject *subclass)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
int _return_value;
|
||||||
|
|
||||||
|
_return_value = type___subclasscheck___impl(self, subclass);
|
||||||
|
if ((_return_value == -1) && PyErr_Occurred()) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
return_value = PyBool_FromLong((long)_return_value);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(type_mro__doc__,
|
||||||
|
"mro($self, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Return a type\'s method resolution order.");
|
||||||
|
|
||||||
|
#define TYPE_MRO_METHODDEF \
|
||||||
|
{"mro", (PyCFunction)type_mro, METH_NOARGS, type_mro__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type_mro_impl(PyTypeObject *self);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type_mro(PyTypeObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
return type_mro_impl(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(type___subclasses____doc__,
|
||||||
|
"__subclasses__($self, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Return a list of immediate subclasses.");
|
||||||
|
|
||||||
|
#define TYPE___SUBCLASSES___METHODDEF \
|
||||||
|
{"__subclasses__", (PyCFunction)type___subclasses__, METH_NOARGS, type___subclasses____doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type___subclasses___impl(PyTypeObject *self);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type___subclasses__(PyTypeObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
return type___subclasses___impl(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(type___dir____doc__,
|
||||||
|
"__dir__($self, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Specialized __dir__ implementation for types.");
|
||||||
|
|
||||||
|
#define TYPE___DIR___METHODDEF \
|
||||||
|
{"__dir__", (PyCFunction)type___dir__, METH_NOARGS, type___dir____doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type___dir___impl(PyTypeObject *self);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type___dir__(PyTypeObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
return type___dir___impl(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(type___sizeof____doc__,
|
||||||
|
"__sizeof__($self, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Return memory consumption of the type object.");
|
||||||
|
|
||||||
|
#define TYPE___SIZEOF___METHODDEF \
|
||||||
|
{"__sizeof__", (PyCFunction)type___sizeof__, METH_NOARGS, type___sizeof____doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type___sizeof___impl(PyTypeObject *self);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type___sizeof__(PyTypeObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
return type___sizeof___impl(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(object___reduce____doc__,
|
||||||
|
"__reduce__($self, protocol=0, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Helper for pickle.");
|
||||||
|
|
||||||
|
#define OBJECT___REDUCE___METHODDEF \
|
||||||
|
{"__reduce__", (PyCFunction)object___reduce__, METH_FASTCALL, object___reduce____doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___reduce___impl(PyObject *self, int protocol);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___reduce__(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
int protocol = 0;
|
||||||
|
|
||||||
|
if (!_PyArg_ParseStack(args, nargs, "|i:__reduce__",
|
||||||
|
&protocol)) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_PyArg_NoStackKeywords("__reduce__", kwnames)) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
return_value = object___reduce___impl(self, protocol);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(object___reduce_ex____doc__,
|
||||||
|
"__reduce_ex__($self, protocol=0, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Helper for pickle.");
|
||||||
|
|
||||||
|
#define OBJECT___REDUCE_EX___METHODDEF \
|
||||||
|
{"__reduce_ex__", (PyCFunction)object___reduce_ex__, METH_FASTCALL, object___reduce_ex____doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___reduce_ex___impl(PyObject *self, int protocol);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___reduce_ex__(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
int protocol = 0;
|
||||||
|
|
||||||
|
if (!_PyArg_ParseStack(args, nargs, "|i:__reduce_ex__",
|
||||||
|
&protocol)) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_PyArg_NoStackKeywords("__reduce_ex__", kwnames)) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
return_value = object___reduce_ex___impl(self, protocol);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(object___format____doc__,
|
||||||
|
"__format__($self, format_spec, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Default object formatter.");
|
||||||
|
|
||||||
|
#define OBJECT___FORMAT___METHODDEF \
|
||||||
|
{"__format__", (PyCFunction)object___format__, METH_O, object___format____doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___format___impl(PyObject *self, PyObject *format_spec);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___format__(PyObject *self, PyObject *arg)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
PyObject *format_spec;
|
||||||
|
|
||||||
|
if (!PyArg_Parse(arg, "U:__format__", &format_spec)) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
return_value = object___format___impl(self, format_spec);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(object___sizeof____doc__,
|
||||||
|
"__sizeof__($self, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Size of object in memory, in bytes.");
|
||||||
|
|
||||||
|
#define OBJECT___SIZEOF___METHODDEF \
|
||||||
|
{"__sizeof__", (PyCFunction)object___sizeof__, METH_NOARGS, object___sizeof____doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___sizeof___impl(PyObject *self);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___sizeof__(PyObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
return object___sizeof___impl(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(object___dir____doc__,
|
||||||
|
"__dir__($self, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Default dir() implementation.");
|
||||||
|
|
||||||
|
#define OBJECT___DIR___METHODDEF \
|
||||||
|
{"__dir__", (PyCFunction)object___dir__, METH_NOARGS, object___dir____doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___dir___impl(PyObject *self);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
object___dir__(PyObject *self, PyObject *Py_UNUSED(ignored))
|
||||||
|
{
|
||||||
|
return object___dir___impl(self);
|
||||||
|
}
|
||||||
|
/*[clinic end generated code: output=ce354e436e2360a0 input=a9049054013a1b77]*/
|
|
@ -6,6 +6,13 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
class type "PyTypeObject *" "&PyType_Type"
|
||||||
|
class object "PyObject *" "&PyBaseObject_Type"
|
||||||
|
[clinic start generated code]*/
|
||||||
|
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=4b94608d231c434b]*/
|
||||||
|
|
||||||
|
#include "clinic/typeobject.c.h"
|
||||||
|
|
||||||
/* Support type attribute cache */
|
/* Support type attribute cache */
|
||||||
|
|
||||||
|
@ -579,7 +586,6 @@ static int update_subclasses(PyTypeObject *type, PyObject *name,
|
||||||
update_callback callback, void *data);
|
update_callback callback, void *data);
|
||||||
static int recurse_down_subclasses(PyTypeObject *type, PyObject *name,
|
static int recurse_down_subclasses(PyTypeObject *type, PyObject *name,
|
||||||
update_callback callback, void *data);
|
update_callback callback, void *data);
|
||||||
static PyObject *type_subclasses(PyTypeObject *type, PyObject *ignored);
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mro_hierarchy(PyTypeObject *type, PyObject *temp)
|
mro_hierarchy(PyTypeObject *type, PyObject *temp)
|
||||||
|
@ -624,7 +630,7 @@ mro_hierarchy(PyTypeObject *type, PyObject *temp)
|
||||||
Finally, this makes things simple avoiding the need to deal
|
Finally, this makes things simple avoiding the need to deal
|
||||||
with dictionary iterators and weak references.
|
with dictionary iterators and weak references.
|
||||||
*/
|
*/
|
||||||
subclasses = type_subclasses(type, NULL);
|
subclasses = type___subclasses___impl(type);
|
||||||
if (subclasses == NULL)
|
if (subclasses == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
n = PyList_GET_SIZE(subclasses);
|
n = PyList_GET_SIZE(subclasses);
|
||||||
|
@ -819,31 +825,36 @@ type_set_doc(PyTypeObject *type, PyObject *value, void *context)
|
||||||
return _PyDict_SetItemId(type->tp_dict, &PyId___doc__, value);
|
return _PyDict_SetItemId(type->tp_dict, &PyId___doc__, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
/*[clinic input]
|
||||||
type___instancecheck__(PyObject *type, PyObject *inst)
|
type.__instancecheck__ -> bool
|
||||||
|
|
||||||
|
instance: object
|
||||||
|
/
|
||||||
|
|
||||||
|
Check if an object is an instance.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
type___instancecheck___impl(PyTypeObject *self, PyObject *instance)
|
||||||
|
/*[clinic end generated code: output=08b6bf5f591c3618 input=cdbfeaee82c01a0f]*/
|
||||||
{
|
{
|
||||||
switch (_PyObject_RealIsInstance(inst, type)) {
|
return _PyObject_RealIsInstance(instance, (PyObject *)self);
|
||||||
case -1:
|
|
||||||
return NULL;
|
|
||||||
case 0:
|
|
||||||
Py_RETURN_FALSE;
|
|
||||||
default:
|
|
||||||
Py_RETURN_TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
type.__subclasscheck__ -> bool
|
||||||
|
|
||||||
static PyObject *
|
subclass: object
|
||||||
type___subclasscheck__(PyObject *type, PyObject *inst)
|
/
|
||||||
|
|
||||||
|
Check if a class is a subclass.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
type___subclasscheck___impl(PyTypeObject *self, PyObject *subclass)
|
||||||
|
/*[clinic end generated code: output=97a4e51694500941 input=071b2ca9e03355f4]*/
|
||||||
{
|
{
|
||||||
switch (_PyObject_RealIsSubclass(inst, type)) {
|
return _PyObject_RealIsSubclass(subclass, (PyObject *)self);
|
||||||
case -1:
|
|
||||||
return NULL;
|
|
||||||
case 0:
|
|
||||||
Py_RETURN_FALSE;
|
|
||||||
default:
|
|
||||||
Py_RETURN_TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1818,12 +1829,17 @@ mro_implementation(PyTypeObject *type)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
/*[clinic input]
|
||||||
mro_external(PyObject *self)
|
type.mro
|
||||||
{
|
|
||||||
PyTypeObject *type = (PyTypeObject *)self;
|
|
||||||
|
|
||||||
return mro_implementation(type);
|
Return a type's method resolution order.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type_mro_impl(PyTypeObject *self)
|
||||||
|
/*[clinic end generated code: output=bffc4a39b5b57027 input=28414f4e156db28d]*/
|
||||||
|
{
|
||||||
|
return mro_implementation(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -3164,8 +3180,15 @@ type_dealloc(PyTypeObject *type)
|
||||||
Py_TYPE(type)->tp_free((PyObject *)type);
|
Py_TYPE(type)->tp_free((PyObject *)type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
type.__subclasses__
|
||||||
|
|
||||||
|
Return a list of immediate subclasses.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
type_subclasses(PyTypeObject *type, PyObject *args_ignored)
|
type___subclasses___impl(PyTypeObject *self)
|
||||||
|
/*[clinic end generated code: output=eb5eb54485942819 input=5af66132436f9a7b]*/
|
||||||
{
|
{
|
||||||
PyObject *list, *raw, *ref;
|
PyObject *list, *raw, *ref;
|
||||||
Py_ssize_t i;
|
Py_ssize_t i;
|
||||||
|
@ -3173,7 +3196,7 @@ type_subclasses(PyTypeObject *type, PyObject *args_ignored)
|
||||||
list = PyList_New(0);
|
list = PyList_New(0);
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
raw = type->tp_subclasses;
|
raw = self->tp_subclasses;
|
||||||
if (raw == NULL)
|
if (raw == NULL)
|
||||||
return list;
|
return list;
|
||||||
assert(PyDict_CheckExact(raw));
|
assert(PyDict_CheckExact(raw));
|
||||||
|
@ -3262,26 +3285,39 @@ merge_class_dict(PyObject *dict, PyObject *aclass)
|
||||||
We deliberately don't suck up its __class__, as methods belonging to the
|
We deliberately don't suck up its __class__, as methods belonging to the
|
||||||
metaclass would probably be more confusing than helpful.
|
metaclass would probably be more confusing than helpful.
|
||||||
*/
|
*/
|
||||||
|
/*[clinic input]
|
||||||
|
type.__dir__
|
||||||
|
|
||||||
|
Specialized __dir__ implementation for types.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
type_dir(PyObject *self, PyObject *args)
|
type___dir___impl(PyTypeObject *self)
|
||||||
|
/*[clinic end generated code: output=69d02fe92c0f15fa input=7733befbec645968]*/
|
||||||
{
|
{
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
PyObject *dict = PyDict_New();
|
PyObject *dict = PyDict_New();
|
||||||
|
|
||||||
if (dict != NULL && merge_class_dict(dict, self) == 0)
|
if (dict != NULL && merge_class_dict(dict, (PyObject *)self) == 0)
|
||||||
result = PyDict_Keys(dict);
|
result = PyDict_Keys(dict);
|
||||||
|
|
||||||
Py_XDECREF(dict);
|
Py_XDECREF(dict);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
/*[clinic input]
|
||||||
type_sizeof(PyObject *self, PyObject *args_unused)
|
type.__sizeof__
|
||||||
|
|
||||||
|
Return memory consumption of the type object.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
type___sizeof___impl(PyTypeObject *self)
|
||||||
|
/*[clinic end generated code: output=766f4f16cd3b1854 input=99398f24b9cf45d6]*/
|
||||||
{
|
{
|
||||||
Py_ssize_t size;
|
Py_ssize_t size;
|
||||||
PyTypeObject *type = (PyTypeObject*)self;
|
if (self->tp_flags & Py_TPFLAGS_HEAPTYPE) {
|
||||||
if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) {
|
PyHeapTypeObject* et = (PyHeapTypeObject*)self;
|
||||||
PyHeapTypeObject* et = (PyHeapTypeObject*)type;
|
|
||||||
size = sizeof(PyHeapTypeObject);
|
size = sizeof(PyHeapTypeObject);
|
||||||
if (et->ht_cached_keys)
|
if (et->ht_cached_keys)
|
||||||
size += _PyDict_KeysSize(et->ht_cached_keys);
|
size += _PyDict_KeysSize(et->ht_cached_keys);
|
||||||
|
@ -3292,22 +3328,16 @@ type_sizeof(PyObject *self, PyObject *args_unused)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMethodDef type_methods[] = {
|
static PyMethodDef type_methods[] = {
|
||||||
{"mro", (PyCFunction)mro_external, METH_NOARGS,
|
TYPE_MRO_METHODDEF
|
||||||
PyDoc_STR("mro() -> list\nreturn a type's method resolution order")},
|
TYPE___SUBCLASSES___METHODDEF
|
||||||
{"__subclasses__", (PyCFunction)type_subclasses, METH_NOARGS,
|
|
||||||
PyDoc_STR("__subclasses__() -> list of immediate subclasses")},
|
|
||||||
{"__prepare__", (PyCFunction)type_prepare,
|
{"__prepare__", (PyCFunction)type_prepare,
|
||||||
METH_FASTCALL | METH_CLASS,
|
METH_FASTCALL | METH_CLASS,
|
||||||
PyDoc_STR("__prepare__() -> dict\n"
|
PyDoc_STR("__prepare__() -> dict\n"
|
||||||
"used to create the namespace for the class statement")},
|
"used to create the namespace for the class statement")},
|
||||||
{"__instancecheck__", type___instancecheck__, METH_O,
|
TYPE___INSTANCECHECK___METHODDEF
|
||||||
PyDoc_STR("__instancecheck__() -> bool\ncheck if an object is an instance")},
|
TYPE___SUBCLASSCHECK___METHODDEF
|
||||||
{"__subclasscheck__", type___subclasscheck__, METH_O,
|
TYPE___DIR___METHODDEF
|
||||||
PyDoc_STR("__subclasscheck__() -> bool\ncheck if a class is a subclass")},
|
TYPE___SIZEOF___METHODDEF
|
||||||
{"__dir__", type_dir, METH_NOARGS,
|
|
||||||
PyDoc_STR("__dir__() -> list\nspecialized __dir__ implementation for types")},
|
|
||||||
{"__sizeof__", type_sizeof, METH_NOARGS,
|
|
||||||
"__sizeof__() -> int\nreturn memory consumption of the type object"},
|
|
||||||
{0}
|
{0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4360,28 +4390,39 @@ _common_reduce(PyObject *self, int proto)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
object.__reduce__
|
||||||
|
|
||||||
|
protocol: int = 0
|
||||||
|
/
|
||||||
|
|
||||||
|
Helper for pickle.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
object_reduce(PyObject *self, PyObject *args)
|
object___reduce___impl(PyObject *self, int protocol)
|
||||||
|
/*[clinic end generated code: output=5572e699c467dd5b input=227f37ed68bd938a]*/
|
||||||
{
|
{
|
||||||
int proto = 0;
|
return _common_reduce(self, protocol);
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "|i:__reduce__", &proto))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return _common_reduce(self, proto);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
object.__reduce_ex__
|
||||||
|
|
||||||
|
protocol: int = 0
|
||||||
|
/
|
||||||
|
|
||||||
|
Helper for pickle.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
object_reduce_ex(PyObject *self, PyObject *args)
|
object___reduce_ex___impl(PyObject *self, int protocol)
|
||||||
|
/*[clinic end generated code: output=2e157766f6b50094 input=8dd6a9602a12749e]*/
|
||||||
{
|
{
|
||||||
static PyObject *objreduce;
|
static PyObject *objreduce;
|
||||||
PyObject *reduce, *res;
|
PyObject *reduce, *res;
|
||||||
int proto = 0;
|
|
||||||
_Py_IDENTIFIER(__reduce__);
|
_Py_IDENTIFIER(__reduce__);
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "|i:__reduce_ex__", &proto))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (objreduce == NULL) {
|
if (objreduce == NULL) {
|
||||||
objreduce = _PyDict_GetItemId(PyBaseObject_Type.tp_dict,
|
objreduce = _PyDict_GetItemId(PyBaseObject_Type.tp_dict,
|
||||||
&PyId___reduce__);
|
&PyId___reduce__);
|
||||||
|
@ -4413,7 +4454,7 @@ object_reduce_ex(PyObject *self, PyObject *args)
|
||||||
Py_DECREF(reduce);
|
Py_DECREF(reduce);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _common_reduce(self, proto);
|
return _common_reduce(self, protocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -4442,16 +4483,22 @@ PyDoc_STRVAR(object_init_subclass_doc,
|
||||||
"The default implementation does nothing. It may be\n"
|
"The default implementation does nothing. It may be\n"
|
||||||
"overridden to extend subclasses.\n");
|
"overridden to extend subclasses.\n");
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
object.__format__
|
||||||
|
|
||||||
|
format_spec: unicode
|
||||||
|
/
|
||||||
|
|
||||||
|
Default object formatter.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
object_format(PyObject *self, PyObject *args)
|
object___format___impl(PyObject *self, PyObject *format_spec)
|
||||||
|
/*[clinic end generated code: output=34897efb543a974b input=7c3b3bc53a6fb7fa]*/
|
||||||
{
|
{
|
||||||
PyObject *format_spec;
|
|
||||||
PyObject *self_as_str = NULL;
|
PyObject *self_as_str = NULL;
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* Issue 7994: If we're converting to a string, we
|
/* Issue 7994: If we're converting to a string, we
|
||||||
should reject format specifications */
|
should reject format specifications */
|
||||||
if (PyUnicode_GET_LENGTH(format_spec) > 0) {
|
if (PyUnicode_GET_LENGTH(format_spec) > 0) {
|
||||||
|
@ -4468,8 +4515,15 @@ object_format(PyObject *self, PyObject *args)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
object.__sizeof__
|
||||||
|
|
||||||
|
Size of object in memory, in bytes.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
object_sizeof(PyObject *self, PyObject *args)
|
object___sizeof___impl(PyObject *self)
|
||||||
|
/*[clinic end generated code: output=73edab332f97d550 input=1200ff3dfe485306]*/
|
||||||
{
|
{
|
||||||
Py_ssize_t res, isize;
|
Py_ssize_t res, isize;
|
||||||
|
|
||||||
|
@ -4485,8 +4539,15 @@ object_sizeof(PyObject *self, PyObject *args)
|
||||||
/* __dir__ for generic objects: returns __dict__, __class__,
|
/* __dir__ for generic objects: returns __dict__, __class__,
|
||||||
and recursively up the __class__.__bases__ chain.
|
and recursively up the __class__.__bases__ chain.
|
||||||
*/
|
*/
|
||||||
|
/*[clinic input]
|
||||||
|
object.__dir__
|
||||||
|
|
||||||
|
Default dir() implementation.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
object_dir(PyObject *self, PyObject *args)
|
object___dir___impl(PyObject *self)
|
||||||
|
/*[clinic end generated code: output=66dd48ea62f26c90 input=0a89305bec669b10]*/
|
||||||
{
|
{
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
PyObject *dict = NULL;
|
PyObject *dict = NULL;
|
||||||
|
@ -4530,20 +4591,15 @@ error:
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMethodDef object_methods[] = {
|
static PyMethodDef object_methods[] = {
|
||||||
{"__reduce_ex__", object_reduce_ex, METH_VARARGS,
|
OBJECT___REDUCE_EX___METHODDEF
|
||||||
PyDoc_STR("helper for pickle")},
|
OBJECT___REDUCE___METHODDEF
|
||||||
{"__reduce__", object_reduce, METH_VARARGS,
|
|
||||||
PyDoc_STR("helper for pickle")},
|
|
||||||
{"__subclasshook__", object_subclasshook, METH_CLASS | METH_VARARGS,
|
{"__subclasshook__", object_subclasshook, METH_CLASS | METH_VARARGS,
|
||||||
object_subclasshook_doc},
|
object_subclasshook_doc},
|
||||||
{"__init_subclass__", object_init_subclass, METH_CLASS | METH_NOARGS,
|
{"__init_subclass__", object_init_subclass, METH_CLASS | METH_NOARGS,
|
||||||
object_init_subclass_doc},
|
object_init_subclass_doc},
|
||||||
{"__format__", object_format, METH_VARARGS,
|
OBJECT___FORMAT___METHODDEF
|
||||||
PyDoc_STR("default object formatter")},
|
OBJECT___SIZEOF___METHODDEF
|
||||||
{"__sizeof__", object_sizeof, METH_NOARGS,
|
OBJECT___DIR___METHODDEF
|
||||||
PyDoc_STR("__sizeof__() -> int\nsize of object in memory, in bytes")},
|
|
||||||
{"__dir__", object_dir, METH_NOARGS,
|
|
||||||
PyDoc_STR("__dir__() -> list\ndefault dir() implementation")},
|
|
||||||
{0}
|
{0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue