Handle function calls, which could include a control statement.

    In CMake, all control flow statements are also function calls, so handle
    the function call first and then direct tree construction to the
    appropriate control flow statement constructor found in
    _FUNCTION_CALL_DISAMBIGUATE

def _handle_function_call(tokens, tokens_len, index):
    """Handle function calls, which could include a control statement.

    In CMake, all control flow statements are also function calls, so handle
    the function call first and then direct tree construction to the
    appropriate control flow statement constructor found in
    _FUNCTION_CALL_DISAMBIGUATE
    """
    def _end_function_call(token_index, tokens):
        """Function call termination detector."""
        return tokens[token_index].type == TokenType.RightParen

    # First handle the "function call"
    next_index, call_body = _ast_worker(tokens, tokens_len,
                                        index + 2,
                                        _end_function_call)

    function_call = FunctionCall(name=tokens[index].content,
                                 arguments=call_body.arguments,
                                 line=tokens[index].line,
                                 col=tokens[index].col,
                                 index=index)

    # Next find a handler for the body and pass control to that
    try:
        handler = _FUNCTION_CALL_DISAMBIGUATE[tokens[index].content.lower()]
    except KeyError:
        handler = None

    if handler:
        return handler(tokens, tokens_len, next_index, function_call)
    else:
        return (next_index, function_call)