diff Objects/typeobject.c @ 54118:ae006386ec39 legacy-trunk

properly lookup __instancecheck__ and __subclasscheck__
author Benjamin Peterson <benjamin@python.org>
date Sat, 16 May 2009 21:44:25 +0000
parents b7920e183422
children cb26299e0e52
line wrap: on
line diff
--- a/Objects/typeobject.c	Sat May 16 18:44:34 2009 +0000
+++ b/Objects/typeobject.c	Sat May 16 21:44:25 2009 +0000
@@ -586,14 +586,6 @@
 
 
 static PyObject *
-type_get_instancecheck(PyObject *type, void *context)
-{
-	static PyMethodDef ml = {"__instancecheck__",
-				 type___instancecheck__, METH_O };
-	return PyCFunction_New(&ml, type);
-}
-
-static PyObject *
 type___subclasscheck__(PyObject *type, PyObject *inst)
 {
 	switch (_PyObject_RealIsSubclass(inst, type)) {
@@ -606,13 +598,6 @@
 	}
 }
 
-static PyObject *
-type_get_subclasscheck(PyObject *type, void *context)
-{
-	static PyMethodDef ml = {"__subclasscheck__",
-				 type___subclasscheck__, METH_O };
-	return PyCFunction_New(&ml, type);
-}
 
 static PyGetSetDef type_getsets[] = {
 	{"__name__", (getter)type_name, (setter)type_set_name, NULL},
@@ -622,8 +607,6 @@
 	 (setter)type_set_abstractmethods, NULL},
 	{"__dict__",  (getter)type_dict,  NULL, NULL},
 	{"__doc__", (getter)type_get_doc, NULL, NULL},
-	{"__instancecheck__", (getter)type_get_instancecheck, NULL, NULL},
-	{"__subclasscheck__", (getter)type_get_subclasscheck, NULL, NULL},
 	{0}
 };
 
@@ -2674,6 +2657,10 @@
 	 PyDoc_STR("mro() -> list\nreturn a type's method resolution order")},
 	{"__subclasses__", (PyCFunction)type_subclasses, METH_NOARGS,
 	 PyDoc_STR("__subclasses__() -> list of immediate subclasses")},
+	{"__instancecheck__", type___instancecheck__, METH_O,
+	 PyDoc_STR("__instancecheck__() -> check if an object is an instance")},
+	{"__subclasscheck__", type___subclasscheck__, METH_O,
+	 PyDoc_STR("__subclasschck__ -> check if an class is a subclass")},
 	{0}
 };