50 lines
1.3 KiB
Plaintext
50 lines
1.3 KiB
Plaintext
functionp - determine whether or not a given variable is a function
|
|
pointer
|
|
|
|
int functionp( mixed arg );
|
|
|
|
Return nonzero if `arg' is a function pointer and zero (0) otherwise.
|
|
Function pointers are variables of type 'function' as indicated in the
|
|
documentation for the type 'function', for example:
|
|
|
|
f = (: call_other, obj, func :);
|
|
|
|
The return value indicates the type of function pointer using the
|
|
values given in the driver include file "include/function.h".
|
|
|
|
<DL>
|
|
* FP_LOCAL - lfun pointer
|
|
* FP_EFUN - efun pointer
|
|
* FP_SIMUL - simul pointer
|
|
* FP_FUNCTIONAL - functional
|
|
</DL>
|
|
|
|
These values are bit values; the following flags may be added as well:
|
|
|
|
<DL>
|
|
* FP_HAS_ARGUMENTS - arguments were included in the definition
|
|
* FP_OWNER_DESTED - the owner of this function pointer has been destructed
|
|
* FP_NOT_BINDABLE - it isn't possible to rebind this function pointer
|
|
</DL>
|
|
|
|
To test if a function variable is an efun pointer:
|
|
|
|
if (functionp(f) & FP_EFUN) ...
|
|
|
|
to test if it is an efun or simul_efun:
|
|
|
|
if (functionp(f) & (FP_EFUN | FP_SIMUL)) ...
|
|
|
|
Try (very hard) to call the function:
|
|
|
|
<pre>
|
|
if (functionp(f) & FP_OWNER_DESTED) {
|
|
if (functionp(f) & FP_NOT_BINDABLE)
|
|
error("Function could not be rebound.\n");
|
|
f = bind(f, this_object());
|
|
}
|
|
evaluate(f);
|
|
</pre>
|
|
|
|
Tim Hollebeek Beek@ZorkMUD, Lima Bean, IdeaExchange, and elsewhere
|