From 8090b426b57bd9ebfa4c593ba3e6f939b2911739 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 17 Jul 2017 15:51:55 +0100 Subject: [PATCH] Introduce CP_OPERATOR_STR/CP_OPERATOR_LEN and use throughout Move LENGTH_OF_OPERATOR from cp-support.c to cp-support.h so we can use it elsewhere. Since there's already CP_ANONYMOUS_NAMESPACE_STR/CP_ANONYMOUS_NAMESPACE_LEN there, follow the same naming pattern for the new symbols. gdb/ChangeLog: 2017-07-17 Pedro Alves * c-exp.y (operator_stoken): Use CP_OPERATOR_LEN and CP_OPERATOR_STR. * c-typeprint.c (is_type_conversion_operator): Use CP_OPERATOR_STR. * cp-support.c (LENGTH_OF_OPERATOR): Delete. (cp_find_first_component_aux): Use CP_OPERATOR_STR and CP_OPERATOR_LEN. * cp-support.h (CP_OPERATOR_STR, CP_OPERATOR_LEN): New. * gnu-v2-abi.c (gnuv2_is_operator_name): Use CP_OPERATOR_STR. * gnu-v3-abi.c (gnuv3_is_operator_name): Use CP_OPERATOR_STR. * linespec.c (linespec_lexer_lex_string): Use CP_OPERATOR_LEN and CP_OPERATOR_STR. * location.c: Include "cp-support.h". (explicit_location_lex_one): Use CP_OPERATOR_LEN and CP_OPERATOR_STR. * symtab.c (operator_chars): Use CP_OPERATOR_STR and CP_OPERATOR_LEN. --- gdb/ChangeLog | 20 ++++++++++++++++++++ gdb/c-exp.y | 5 ++--- gdb/c-typeprint.c | 2 +- gdb/cp-support.c | 9 ++------- gdb/cp-support.h | 8 ++++++++ gdb/gnu-v2-abi.c | 2 +- gdb/gnu-v3-abi.c | 2 +- gdb/linespec.c | 5 ++--- gdb/location.c | 5 +++-- gdb/symtab.c | 4 ++-- 10 files changed, 42 insertions(+), 20 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 554a9e5d34..8778caea42 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,23 @@ +2017-07-17 Pedro Alves + + * c-exp.y (operator_stoken): Use CP_OPERATOR_LEN and + CP_OPERATOR_STR. + * c-typeprint.c (is_type_conversion_operator): Use + CP_OPERATOR_STR. + * cp-support.c (LENGTH_OF_OPERATOR): Delete. + (cp_find_first_component_aux): Use CP_OPERATOR_STR and + CP_OPERATOR_LEN. + * cp-support.h (CP_OPERATOR_STR, CP_OPERATOR_LEN): New. + * gnu-v2-abi.c (gnuv2_is_operator_name): Use CP_OPERATOR_STR. + * gnu-v3-abi.c (gnuv3_is_operator_name): Use CP_OPERATOR_STR. + * linespec.c (linespec_lexer_lex_string): Use CP_OPERATOR_LEN and + CP_OPERATOR_STR. + * location.c: Include "cp-support.h". + (explicit_location_lex_one): Use CP_OPERATOR_LEN and + CP_OPERATOR_STR. + * symtab.c (operator_chars): Use CP_OPERATOR_STR and + CP_OPERATOR_LEN. + 2017-07-17 Pedro Alves * cli/cli-cmds.c (complete_command): Use a completion tracker diff --git a/gdb/c-exp.y b/gdb/c-exp.y index bdcd51f4a6..24a2fbd76e 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -1625,13 +1625,12 @@ write_destructor_name (struct parser_state *par_state, struct stoken token) static struct stoken operator_stoken (const char *op) { - static const char *operator_string = "operator"; struct stoken st = { NULL, 0 }; char *buf; - st.length = strlen (operator_string) + strlen (op); + st.length = CP_OPERATOR_LEN + strlen (op); buf = (char *) malloc (st.length + 1); - strcpy (buf, operator_string); + strcpy (buf, CP_OPERATOR_STR); strcat (buf, op); st.ptr = buf; diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c index 9e197f5721..890888bd4f 100644 --- a/gdb/c-typeprint.c +++ b/gdb/c-typeprint.c @@ -547,7 +547,7 @@ is_type_conversion_operator (struct type *type, int i, int j) some other way, feel free to rewrite this function. */ const char *name = TYPE_FN_FIELDLIST_NAME (type, i); - if (!startswith (name, "operator")) + if (!startswith (name, CP_OPERATOR_STR)) return 0; name += 8; diff --git a/gdb/cp-support.c b/gdb/cp-support.c index 5704466c92..122faddf35 100644 --- a/gdb/cp-support.c +++ b/gdb/cp-support.c @@ -931,10 +931,6 @@ cp_find_first_component (const char *name) the recursion easier, it also stops if it reaches an unexpected ')' or '>' if the value of PERMISSIVE is nonzero. */ -/* Let's optimize away calls to strlen("operator"). */ - -#define LENGTH_OF_OPERATOR 8 - static unsigned int cp_find_first_component_aux (const char *name, int permissive) { @@ -1006,10 +1002,9 @@ cp_find_first_component_aux (const char *name, int permissive) case 'o': /* Operator names can screw up the recursion. */ if (operator_possible - && strncmp (name + index, "operator", - LENGTH_OF_OPERATOR) == 0) + && startswith (name + index, CP_OPERATOR_STR)) { - index += LENGTH_OF_OPERATOR; + index += CP_OPERATOR_LEN; while (ISSPACE(name[index])) ++index; switch (name[index]) diff --git a/gdb/cp-support.h b/gdb/cp-support.h index 9054bf678c..37b281fa54 100644 --- a/gdb/cp-support.h +++ b/gdb/cp-support.h @@ -46,6 +46,14 @@ struct using_direct; #define CP_ANONYMOUS_NAMESPACE_LEN 21 +/* A string representing the start of an operator name. */ + +#define CP_OPERATOR_STR "operator" + +/* The length of CP_OPERATOR_STR. */ + +#define CP_OPERATOR_LEN 8 + /* The result of parsing a name. */ struct demangle_parse_info diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c index 0af684f454..91c42015aa 100644 --- a/gdb/gnu-v2-abi.c +++ b/gdb/gnu-v2-abi.c @@ -68,7 +68,7 @@ gnuv2_is_vtable_name (const char *name) static int gnuv2_is_operator_name (const char *name) { - return startswith (name, "operator"); + return startswith (name, CP_OPERATOR_STR); } diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c index 0090990b1e..f5d3d13a53 100644 --- a/gdb/gnu-v3-abi.c +++ b/gdb/gnu-v3-abi.c @@ -46,7 +46,7 @@ gnuv3_is_vtable_name (const char *name) static int gnuv3_is_operator_name (const char *name) { - return startswith (name, "operator"); + return startswith (name, CP_OPERATOR_STR); } diff --git a/gdb/linespec.c b/gdb/linespec.c index 4c076fea3e..25ebdcafa9 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -688,10 +688,9 @@ linespec_lexer_lex_string (linespec_parser *parser) { if ((PARSER_STATE (parser)->language->la_language == language_cplus) - && (PARSER_STREAM (parser) - start) > 8 - /* strlen ("operator") */) + && (PARSER_STREAM (parser) - start) > CP_OPERATOR_LEN) { - const char *p = strstr (start, "operator"); + const char *p = strstr (start, CP_OPERATOR_STR); if (p != NULL && is_operator_name (p)) { diff --git a/gdb/location.c b/gdb/location.c index 87963207ba..d711d7b25b 100644 --- a/gdb/location.c +++ b/gdb/location.c @@ -24,6 +24,7 @@ #include "linespec.h" #include "cli/cli-utils.h" #include "probe.h" +#include "cp-support.h" #include #include @@ -473,8 +474,8 @@ explicit_location_lex_one (const char **inp, { /* Special case: C++ operator,. */ if (language->la_language == language_cplus - && strncmp (*inp, "operator", 8) == 0) - (*inp) += 8; + && startswith (*inp, CP_OPERATOR_STR)) + (*inp) += CP_OPERATOR_LEN; ++(*inp); } } diff --git a/gdb/symtab.c b/gdb/symtab.c index 57fb355328..b077369516 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -3839,9 +3839,9 @@ static const char * operator_chars (const char *p, const char **end) { *end = ""; - if (!startswith (p, "operator")) + if (!startswith (p, CP_OPERATOR_STR)) return *end; - p += 8; + p += CP_OPERATOR_LEN; /* Don't get faked out by `operator' being part of a longer identifier. */ -- 2.34.1