diff options
author | Tom Tromey <tom@tromey.com> | 2019-04-07 15:29:58 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-04-19 14:10:23 -0600 |
commit | 61f4b350419e91560be94e0671a760b2e4902c65 (patch) | |
tree | f1cc08b31b813c81d730ccd69974772d82cbcd12 /gdb/parse.c | |
parent | 189b8c2e104017600104457b97315da74a22f549 (diff) | |
download | gdb-61f4b350419e91560be94e0671a760b2e4902c65.zip gdb-61f4b350419e91560be94e0671a760b2e4902c65.tar.gz gdb-61f4b350419e91560be94e0671a760b2e4902c65.tar.bz2 |
Make copy_name return std::string
This changes copy_name to return a std::string, updating all the
callers. In some cases, an extra copy was removed. This also
required a little bit of constification.
Tested by the buildbot.
gdb/ChangeLog
2019-04-19 Tom Tromey <tom@tromey.com>
* type-stack.h (struct type_stack) <insert>: Constify string.
* type-stack.c (type_stack::insert): Constify string.
* gdbtypes.h (lookup_template_type): Update.
(address_space_name_to_int): Update.
* gdbtypes.c (address_space_name_to_int): Make space_identifier
const.
(lookup_template_type): Make name const.
* c-exp.y: Update rules.
(lex_one_token, classify_name, classify_inner_name)
(c_print_token): Update.
* p-exp.y: Update rules.
(yylex): Update.
* f-exp.y: Update rules.
(yylex): Update.
* d-exp.y: Update rules.
(lex_one_token, classify_name, classify_inner_name): Update.
* parse.c (write_dollar_variable, copy_name): Return std::string.
* parser-defs.h (copy_name): Change return type.
* m2-exp.y: Update rules.
(yylex): Update.
* go-exp.y (lex_one_token): Update.
Update rules.
(classify_unsafe_function, classify_packaged_name)
(classify_name, yylex): Update.
Diffstat (limited to 'gdb/parse.c')
-rw-r--r-- | gdb/parse.c | 37 |
1 files changed, 9 insertions, 28 deletions
diff --git a/gdb/parse.c b/gdb/parse.c index 3e02057..52f2975 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -548,6 +548,7 @@ write_dollar_variable (struct parser_state *ps, struct stoken str) struct block_symbol sym; struct bound_minimal_symbol msym; struct internalvar *isym = NULL; + std::string copy; /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1) and $$digits (equivalent to $<-digits> if you could type that). */ @@ -588,7 +589,8 @@ write_dollar_variable (struct parser_state *ps, struct stoken str) /* Any names starting with $ are probably debugger internal variables. */ - isym = lookup_only_internalvar (copy_name (str) + 1); + copy = copy_name (str); + isym = lookup_only_internalvar (copy.c_str () + 1); if (isym) { write_exp_elt_opcode (ps, OP_INTERNALVAR); @@ -600,7 +602,7 @@ write_dollar_variable (struct parser_state *ps, struct stoken str) /* On some systems, such as HP-UX and hppa-linux, certain system routines have names beginning with $ or $$. Check for those, first. */ - sym = lookup_symbol (copy_name (str), NULL, VAR_DOMAIN, NULL); + sym = lookup_symbol (copy.c_str (), NULL, VAR_DOMAIN, NULL); if (sym.symbol) { write_exp_elt_opcode (ps, OP_VAR_VALUE); @@ -609,7 +611,7 @@ write_dollar_variable (struct parser_state *ps, struct stoken str) write_exp_elt_opcode (ps, OP_VAR_VALUE); return; } - msym = lookup_bound_minimal_symbol (copy_name (str)); + msym = lookup_bound_minimal_symbol (copy.c_str ()); if (msym.minsym) { write_exp_msymbol (ps, msym); @@ -619,7 +621,7 @@ write_dollar_variable (struct parser_state *ps, struct stoken str) /* Any other names are assumed to be debugger internal variables. */ write_exp_elt_opcode (ps, OP_INTERNALVAR); - write_exp_elt_intern (ps, create_internalvar (copy_name (str) + 1)); + write_exp_elt_intern (ps, create_internalvar (copy.c_str () + 1)); write_exp_elt_opcode (ps, OP_INTERNALVAR); return; handle_last: @@ -706,33 +708,12 @@ find_template_name_end (const char *p) so they can share the storage that lexptr is parsing. When it is necessary to pass a name to a function that expects a null-terminated string, the substring is copied out - into a separate block of storage. + into a separate block of storage. */ - N.B. A single buffer is reused on each call. */ - -char * +std::string copy_name (struct stoken token) { - /* A temporary buffer for identifiers, so we can null-terminate them. - We allocate this with xrealloc. parse_exp_1 used to allocate with - alloca, using the size of the whole expression as a conservative - estimate of the space needed. However, macro expansion can - introduce names longer than the original expression; there's no - practical way to know beforehand how large that might be. */ - static char *namecopy; - static size_t namecopy_size; - - /* Make sure there's enough space for the token. */ - if (namecopy_size < token.length + 1) - { - namecopy_size = token.length + 1; - namecopy = (char *) xrealloc (namecopy, token.length + 1); - } - - memcpy (namecopy, token.ptr, token.length); - namecopy[token.length] = 0; - - return namecopy; + return std::string (token.ptr, token.length); } |