public function GenerateArgInfo(
        \Peg\Lib\Definitions\Element\FunctionElement $function_object
    )
    {
        $namespace_name = $function_object->namespace->name;

        if($namespace_name == "\\")
            $namespace_name = "";

        $namespace_name_cpp = str_replace(
            "\\",
            "::",
            $namespace_name
        );

        $namespace_name_var = str_replace(
            "\\",
            "_",
            $namespace_name
        );

        $arginfo_code = "";

        $function_name = $function_object->name;

        // Get the amount of required parameters from the
        // overload which require less.
        $required_parameters = 1000;

        foreach($function_object->overloads as $overload=>$overload_object)
        {
            if($required_parameters > $overload_object->GetRequiredParametersCount())
                $required_parameters = $overload_object->GetRequiredParametersCount();
        }

        // Generate a list of argument objects from the overload
        // with the longest amount of parameters.
        $arguments_list = array();
        foreach($function_object->overloads as $overload=>$overload_object)
        {
            if($overload_object->HasParameters())
            {
                if(count($arguments_list) < count($overload_object->parameters))
                {
                    $index = 0;

                    foreach($overload_object->parameters as $parameter_object)
                    {
                        $arguments_list[$index] = $parameter_object;

                        $index++;
                    }
                }
            }
        }

        // Get Header
        ob_start();
            include($this->GetTemplatePath(
                $function_name,
                "arginfo",
                "header",
                "helpers",
                "arginfo",
                $namespace_name
            ));
            $arginfo_code .= ob_get_contents();
        ob_end_clean();

        foreach($arguments_list as $parameter_object)
        {
            $parameter_name = $parameter_object->name;

            // Generate the entry of arguments
            ob_start();
                include($this->GetParameterTemplate($parameter_object, "", "arginfo"));
                $arginfo_code .= $this->Indent(ob_get_contents(), 4);
            ob_end_clean();
        }

        // Get Header
        ob_start();
            include($this->GetTemplatePath(
                $function_name,
                "arginfo",
                "footer",
                "helpers",
                "arginfo",
                $namespace_name
            ));
            $arginfo_code .= ob_get_contents();
        ob_end_clean();

        return $arginfo_code;
    }