Kaydet (Commit) 49b11fed authored tarafından Guido van Rossum's avatar Guido van Rossum

move callable() here

üst f8803dd6
...@@ -386,6 +386,35 @@ coerce(pv, pw) ...@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment