Skip to main content

functionp

Discworld driver help

functionp

Name

functionp() - determine whether or not a given variable is a function pointer

Synopsis

int functionp( mixed arg );

Description

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 <function.h>.

FP_LOCALlfun pointer
FP_EFUNefun pointer
FP_SIMULsimul pointer
FP_FUNCTIONALfunctional

These values are bit values; the following flags may be added as well:

FP_HAS_ARGUMENTSarguments were included in the definition
FP_OWNER_DESTEDthe owner of this function pointer has been destructed
FP_NOT_BINDABLEit isn't possible to rebind this function pointer

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:

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);

See also

mapp(), stringp(), pointerp(), objectp(), intp(), bufferp(), floatp(), nullp(), undefinedp(), errorp(), bind(), function