move callable() here

This commit is contained in:
Guido van Rossum 1995-01-26 00:38:22 +00:00
parent f8803dd6c3
commit 49b11fed70

View file

@ -386,6 +386,35 @@ coerce(pv, pw)
} }
/* Test whether an object can be called */
int
callable(x)
object *x;
{
if (x == NULL)
return 0;
if (x->ob_type->tp_call != NULL ||
is_funcobject(x) ||
is_instancemethodobject(x) ||
is_methodobject(x) ||
is_classobject(x))
return 1;
if (is_instanceobject(x)) {
object *call = getattr(x, "__call__");
if (call == NULL) {
err_clear();
return 0;
}
/* Could test recursively but don't, for fear of endless
recursion if some joker sets self.__call__ = self */
DECREF(call);
return 1;
}
return 0;
}
/* /*
NoObject is usable as a non-NULL undefined value, used by the macro None. NoObject is usable as a non-NULL undefined value, used by the macro None.
There is (and should be!) no way to create other objects of this type, There is (and should be!) no way to create other objects of this type,