diff options
author | Keith Seitz <keiths@redhat.com> | 2022-02-24 16:42:22 -0800 |
---|---|---|
committer | Keith Seitz <keiths@redhat.com> | 2022-02-24 16:42:22 -0800 |
commit | 2f2c677e670063360cbb3fb1b32bd6cf36bcf03a (patch) | |
tree | ae2115f266176ad9555cc09d8e1b5239ee04de15 /gdb/linespec.c | |
parent | 685c6a86373edfce04454562e022a20a303eb734 (diff) | |
download | gdb-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.c | 77 |
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. */ |