New cli-utils.h/.c function extract_info_print_args
New cli-utils.h/.c function extract_info_print_args factorizes the extraction of the args '[-q] [-t TYPEREGEXP] [NAMEREGEXP]'. New cli-utils.h/.c function report_unrecognized_option_error factorizes reporting an unknown option for a command. These functions will be used by the commands info [args|functions|locals|variables] As extract_info_print_args will be used for 'info functions|variables' which already have the NAMEREGEXP arg, it provides a backward compatible behaviour. cli-utils.c has a new static function extract_arg_maybe_quoted that extracts an argument, possibly quoted. The behaviour of this function is similar to the parsing done by gdb_argv. gdb/ChangeLog 2018-10-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> * cli-utils.c (extract_arg_maybe_quoted): New function. (extract_info_print_args): New function. (info_print_args_help): New function. (report_unrecognized_option_error): New function. * cli-utils.h (extract_arg_maybe_quoted): New function. (extract_info_print_args): New function. (info_print_args_help): New function. (report_unrecognized_option_error): New function.
This commit is contained in:
parent
6951e9f3e2
commit
0d4cad90ca
3 changed files with 170 additions and 0 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
2018-10-27 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||||
|
|
||||||
|
* cli-utils.c (extract_arg_maybe_quoted): New function.
|
||||||
|
(extract_info_print_args): New function.
|
||||||
|
(info_print_args_help): New function.
|
||||||
|
(report_unrecognized_option_error): New function.
|
||||||
|
* cli-utils.h (extract_arg_maybe_quoted): New function.
|
||||||
|
(extract_info_print_args): New function.
|
||||||
|
(info_print_args_help): New function.
|
||||||
|
(report_unrecognized_option_error): New function.
|
||||||
|
|
||||||
2018-10-26 Tom Tromey <tom@tromey.com>
|
2018-10-26 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* dwarf2read.c (recursively_compute_inclusions): Use std::vector.
|
* dwarf2read.c (recursively_compute_inclusions): Use std::vector.
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
static std::string extract_arg_maybe_quoted (const char **arg);
|
||||||
|
|
||||||
/* See documentation in cli-utils.h. */
|
/* See documentation in cli-utils.h. */
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -128,6 +130,70 @@ get_number (char **pp)
|
||||||
|
|
||||||
/* See documentation in cli-utils.h. */
|
/* See documentation in cli-utils.h. */
|
||||||
|
|
||||||
|
bool
|
||||||
|
extract_info_print_args (const char **args,
|
||||||
|
bool *quiet,
|
||||||
|
std::string *regexp,
|
||||||
|
std::string *t_regexp)
|
||||||
|
{
|
||||||
|
/* Check for NAMEREGEXP or -- NAMEREGEXP. */
|
||||||
|
if (**args != '-' || check_for_argument (args, "--", 2))
|
||||||
|
{
|
||||||
|
*args = skip_spaces (*args);
|
||||||
|
*regexp = *args;
|
||||||
|
*args = NULL;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_for_argument (args, "-t", 2))
|
||||||
|
{
|
||||||
|
*t_regexp = extract_arg_maybe_quoted (args);
|
||||||
|
*args = skip_spaces (*args);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_for_argument (args, "-q", 2))
|
||||||
|
{
|
||||||
|
*quiet = true;
|
||||||
|
*args = skip_spaces (*args);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* See documentation in cli-utils.h. */
|
||||||
|
|
||||||
|
void
|
||||||
|
report_unrecognized_option_error (const char *command, const char *args)
|
||||||
|
{
|
||||||
|
std::string option = extract_arg (&args);
|
||||||
|
|
||||||
|
error (_("Unrecognized option '%s' to %s command. "
|
||||||
|
"Try \"help %s\"."), option.c_str (),
|
||||||
|
command, command);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* See documentation in cli-utils.h. */
|
||||||
|
|
||||||
|
const char *
|
||||||
|
info_print_args_help (const char *prefix,
|
||||||
|
const char *entity_kind)
|
||||||
|
{
|
||||||
|
return xstrprintf (_("\
|
||||||
|
%sIf NAMEREGEXP is provided, only prints the %s whose name\n\
|
||||||
|
matches NAMEREGEXP.\n\
|
||||||
|
If -t TYPEREGEXP is provided, only prints the %s whose type\n\
|
||||||
|
matches TYPEREGEXP. Note that the matching is done with the type\n\
|
||||||
|
printed by the 'whatis' command.\n\
|
||||||
|
By default, the command might produce headers and/or messages indicating\n\
|
||||||
|
why no %s can be printed.\n\
|
||||||
|
The flag -q disables the production of these headers and messages."),
|
||||||
|
prefix, entity_kind, entity_kind, entity_kind);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* See documentation in cli-utils.h. */
|
||||||
|
|
||||||
number_or_range_parser::number_or_range_parser (const char *string)
|
number_or_range_parser::number_or_range_parser (const char *string)
|
||||||
{
|
{
|
||||||
init (string);
|
init (string);
|
||||||
|
@ -283,6 +349,69 @@ remove_trailing_whitespace (const char *start, const char *s)
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* A helper function to extract an argument from *ARG. An argument is
|
||||||
|
delimited by whitespace, but it can also be optionally quoted.
|
||||||
|
The quoting and special characters are handled similarly to
|
||||||
|
the parsing done by gdb_argv.
|
||||||
|
The return value is empty if no argument was found. */
|
||||||
|
|
||||||
|
static std::string
|
||||||
|
extract_arg_maybe_quoted (const char **arg)
|
||||||
|
{
|
||||||
|
bool squote = false;
|
||||||
|
bool dquote = false;
|
||||||
|
bool bsquote = false;
|
||||||
|
std::string result;
|
||||||
|
const char *p = *arg;
|
||||||
|
|
||||||
|
/* Find the start of the argument. */
|
||||||
|
p = skip_spaces (p);
|
||||||
|
|
||||||
|
/* Parse p similarly to gdb_argv buildargv function. */
|
||||||
|
while (*p != '\0')
|
||||||
|
{
|
||||||
|
if (isspace (*p) && !squote && !dquote && !bsquote)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (bsquote)
|
||||||
|
{
|
||||||
|
bsquote = false;
|
||||||
|
result += *p;
|
||||||
|
}
|
||||||
|
else if (*p == '\\')
|
||||||
|
bsquote = true;
|
||||||
|
else if (squote)
|
||||||
|
{
|
||||||
|
if (*p == '\'')
|
||||||
|
squote = false;
|
||||||
|
else
|
||||||
|
result += *p;
|
||||||
|
}
|
||||||
|
else if (dquote)
|
||||||
|
{
|
||||||
|
if (*p == '"')
|
||||||
|
dquote = false;
|
||||||
|
else
|
||||||
|
result += *p;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (*p == '\'')
|
||||||
|
squote = true;
|
||||||
|
else if (*p == '"')
|
||||||
|
dquote = true;
|
||||||
|
else
|
||||||
|
result += *p;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*arg = p;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/* See documentation in cli-utils.h. */
|
/* See documentation in cli-utils.h. */
|
||||||
|
|
||||||
std::string
|
std::string
|
||||||
|
|
|
@ -39,6 +39,36 @@ extern int get_number (const char **);
|
||||||
|
|
||||||
extern int get_number (char **);
|
extern int get_number (char **);
|
||||||
|
|
||||||
|
/* Extract from ARGS the arguments [-q] [-t TYPEREGEXP] [--] NAMEREGEXP.
|
||||||
|
|
||||||
|
The caller is responsible to initialize *QUIET to false, *REGEXP
|
||||||
|
and *T_REGEXP to "".
|
||||||
|
extract_info_print_args can then be called iteratively to search
|
||||||
|
for valid arguments, as part of a 'main parsing loop' searching for
|
||||||
|
-q/-t/-- arguments together with other flags and options.
|
||||||
|
|
||||||
|
Returns true and updates *ARGS + one of *QUIET, *REGEXP, *T_REGEXP if
|
||||||
|
it finds a valid argument.
|
||||||
|
Returns false if no valid argument is found at the beginning of ARGS. */
|
||||||
|
|
||||||
|
extern bool extract_info_print_args (const char **args,
|
||||||
|
bool *quiet,
|
||||||
|
std::string *regexp,
|
||||||
|
std::string *t_regexp);
|
||||||
|
|
||||||
|
/* Throws an error telling the user that ARGS starts with an option
|
||||||
|
unrecognized by COMMAND. */
|
||||||
|
|
||||||
|
extern void report_unrecognized_option_error (const char *command,
|
||||||
|
const char *args);
|
||||||
|
|
||||||
|
|
||||||
|
/* Builds the help string for a command documented by PREFIX,
|
||||||
|
followed by the extract_info_print_args help for ENTITY_KIND. */
|
||||||
|
|
||||||
|
const char *info_print_args_help (const char *prefix,
|
||||||
|
const char *entity_kind);
|
||||||
|
|
||||||
/* Parse a number or a range.
|
/* Parse a number or a range.
|
||||||
A number will be of the form handled by get_number.
|
A number will be of the form handled by get_number.
|
||||||
A range will be of the form <number1> - <number2>, and
|
A range will be of the form <number1> - <number2>, and
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue