Fixtype of static information about functions.
This is a product type introduced by fty::defprod.
This is the information about functions needed for the static semantics.
This static information includes the type of the function. Function types are described in [C:6.2.5/20]. Eventually these may be integrated into a broader formalized notion of C types, but for now we use a list of zero or more input types and a single output type. Our current formalization of types does not include function types.
This static information also includes a flag that says
whether the function has been defined or not.
A function may be declared without being defined,
via a declaration [C:6.7].
A file may have multiple declarations of the same function,
via linkage [C:6.2.2/1],
and up to one definition of the function [C:6.9/3] [C:6.9/5].
The declarations and definition must have compatible types [C:6.7/4],
which in our C subset, for functions,
means identical input and output types.
In order to check all of these requirements,
as soon as we encounter the declaration or definition of a function,
we add it to the function table with the appropriate flag and types.
If we encounter more declarations of the same function after that,
we ensure that the types are the same, and we leave the flag unchanged.
If the function has one or more declarations before its definition,
the flag is initially