FUNCTION func-spec
The FUNCTION
keyword provides the
reference to the specified function.
Syntax
FUNCTION [
module-name.]
function-name
- module-name is the name of an imported module.
- function-name is the name of a function defining in the current module or in an imported module.
Usage
Inside a MAIN
or FUNCTION
block, the FUNCTION
keyword instructs the compiler to use the next symbol as the name of a function, rather than the
name of a variable (the language allows the declaration of variables and functions with the same
name in the same module).
The function specification following the FUNCTION
keyword can be a single
function name or a function name prefixed by a module
name.
The return-types of the referenced functions must be known: If the referenced function returns
one or more values, the function type and the function itself must be defined with a RETURNS
clause. Otherwise, the compiler will produce the error -8419.
A FUNCTION func-spec
expression is typically used to assign a
variable defined with a TYPE
referencing a function. It can also be used as parameter in a function call, but it cannot be
combined with other expressions.
In order to assign a function reference to a variable, the variable must have been defined with a function type that matches the referenced function: The function parameter names and types, as well as the return types must be the same. If the signatures of the function type and function reference do not match, the compiler produces the error -6631.
Example
IMPORT FGL mymodule
TYPE callback_function FUNCTION(p1 INT, p2 INT) RETURNS INT
FUNCTION add(p1 INT, p2 INT) RETURNS INT
RETURN p1 + p2
END FUNCTION
...
DEFINE v callback_function
LET v = FUNCTION add -- Assign function reference to the variable
...
CALL process( FUNCTION add, ... ) -- Function reference passed as parameter
...
LET v = FUNCTION mymodule.sub -- Using a module prefix