move callable() here

This commit is contained in:
Guido van Rossum 1995-01-26 00:38:22 +00:00
parent f8803dd6c3
commit 49b11fed70
1 changed files with 29 additions and 0 deletions

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.
There is (and should be!) no way to create other objects of this type,