aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2017-07-17 15:51:55 +0100
committerPedro Alves <palves@redhat.com>2017-07-17 15:51:55 +0100
commit8090b426b57bd9ebfa4c593ba3e6f939b2911739 (patch)
tree76234c2ece65a1b19b697e0352adfdae343638c0
parent6a2c1b8790e58ce0688507b5b1f8369aa621a665 (diff)
downloadgdb-8090b426b57bd9ebfa4c593ba3e6f939b2911739.zip
gdb-8090b426b57bd9ebfa4c593ba3e6f939b2911739.tar.gz
gdb-8090b426b57bd9ebfa4c593ba3e6f939b2911739.tar.bz2
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 <palves@redhat.com> * 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.
-rw-r--r--gdb/ChangeLog20
-rw-r--r--gdb/c-exp.y5
-rw-r--r--gdb/c-typeprint.c2
-rw-r--r--gdb/cp-support.c9
-rw-r--r--gdb/cp-support.h8
-rw-r--r--gdb/gnu-v2-abi.c2
-rw-r--r--gdb/gnu-v3-abi.c2
-rw-r--r--gdb/linespec.c5
-rw-r--r--gdb/location.c5
-rw-r--r--gdb/symtab.c4
10 files changed, 42 insertions, 20 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 554a9e5..8778cae 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,25 @@
2017-07-17 Pedro Alves <palves@redhat.com>
+ * 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 <palves@redhat.com>
+
* cli/cli-cmds.c (complete_command): Use a completion tracker
along with completion_find_completion_word for handle_brkchars
phase.
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index bdcd51f..24a2fbd 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 9e197f5..890888b 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 5704466..122fadd 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 9054bf6..37b281f 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 0af684f..91c4201 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 0090990..f5d3d13 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 4c076fe..25ebdca 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 8796320..d711d7b 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 <ctype.h>
#include <string.h>
@@ -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 57fb355..b077369 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. */