aboutsummaryrefslogtreecommitdiff
path: root/gdb/linespec.c
diff options
context:
space:
mode:
authorKeith Seitz <keiths@redhat.com>2022-02-24 16:42:22 -0800
committerKeith Seitz <keiths@redhat.com>2022-02-24 16:42:22 -0800
commit2f2c677e670063360cbb3fb1b32bd6cf36bcf03a (patch)
treeae2115f266176ad9555cc09d8e1b5239ee04de15 /gdb/linespec.c
parent685c6a86373edfce04454562e022a20a303eb734 (diff)
downloadgdb-2f2c677e670063360cbb3fb1b32bd6cf36bcf03a.zip
gdb-2f2c677e670063360cbb3fb1b32bd6cf36bcf03a.tar.gz
gdb-2f2c677e670063360cbb3fb1b32bd6cf36bcf03a.tar.bz2
Move find_toplevel_char to cp-support.[ch]
find_toplevel_char is being used more and more outside of linespec.c, so this patch moves it into cp-support.[ch].
Diffstat (limited to 'gdb/linespec.c')
-rw-r--r--gdb/linespec.c77
1 files changed, 0 insertions, 77 deletions
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 707a3a2..4d41f74 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -1298,83 +1298,6 @@ find_methods (struct type *t, enum language t_lang, const char *name,
superclasses->push_back (TYPE_BASECLASS (t, ibase));
}
-/* Find an instance of the character C in the string S that is outside
- of all parenthesis pairs, single-quoted strings, and double-quoted
- strings. Also, ignore the char within a template name, like a ','
- within foo<int, int>, while considering C++ operator</operator<<. */
-
-const char *
-find_toplevel_char (const char *s, char c)
-{
- int quoted = 0; /* zero if we're not in quotes;
- '"' if we're in a double-quoted string;
- '\'' if we're in a single-quoted string. */
- int depth = 0; /* Number of unclosed parens we've seen. */
- const char *scan;
-
- for (scan = s; *scan; scan++)
- {
- if (quoted)
- {
- if (*scan == quoted)
- quoted = 0;
- else if (*scan == '\\' && *(scan + 1))
- scan++;
- }
- else if (*scan == c && ! quoted && depth == 0)
- return scan;
- else if (*scan == '"' || *scan == '\'')
- quoted = *scan;
- else if (*scan == '(' || *scan == '<')
- depth++;
- else if ((*scan == ')' || *scan == '>') && depth > 0)
- depth--;
- else if (*scan == 'o' && !quoted && depth == 0)
- {
- /* Handle C++ operator names. */
- if (strncmp (scan, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0)
- {
- scan += CP_OPERATOR_LEN;
- if (*scan == c)
- return scan;
- while (isspace (*scan))
- {
- ++scan;
- if (*scan == c)
- return scan;
- }
- if (*scan == '\0')
- break;
-
- switch (*scan)
- {
- /* Skip over one less than the appropriate number of
- characters: the for loop will skip over the last
- one. */
- case '<':
- if (scan[1] == '<')
- {
- scan++;
- if (*scan == c)
- return scan;
- }
- break;
- case '>':
- if (scan[1] == '>')
- {
- scan++;
- if (*scan == c)
- return scan;
- }
- break;
- }
- }
- }
- }
-
- return 0;
-}
-
/* The string equivalent of find_toplevel_char. Returns a pointer
to the location of NEEDLE in HAYSTACK, ignoring any occurrences
inside "()" and "<>". Returns NULL if NEEDLE was not found. */