Functions and their relations can affect numerous properties and metrics of a functional
program. To identify and represent the functions and their calling connections, software
analysers commonly apply semantic function analysis, which derives the static call
graph of the program, based on its source code. Function calls however may be dynamic
and complex, making it difficult to statically identify the callee. Dynamic calls
are determined just at run-time, static analysis therefore cannot be expected to fully
identify every call. Nevertheless, by utilising the results of a properly performed
data-flow analysis as well as taking ambiguous references into account, numerous dynamic
calls are discoverable and representable. We consider cases where the identifiers
of the callee are statically determined, but they flow into the call expression from
a different program point, and also, we manage to handle function calls whose identifiers
are not fully identifiable at compile-time. By utilising the improved reference analysis,
we extend the static call graph with various information about dynamic function calls.
We investigate such a function call analysis in the programming language Erlang.