diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2024-07-24 15:07:14 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2024-07-30 08:52:57 -0400 |
commit | 1cb8a69ec2955e736e24340ef476fed5abeb7703 (patch) | |
tree | 455e2660fbd9baef25503f966967702810efc008 /gdb/dwarf2 | |
parent | a7763df8fbabe0d364d7f1e418683ee460518998 (diff) | |
download | gdb-1cb8a69ec2955e736e24340ef476fed5abeb7703.zip gdb-1cb8a69ec2955e736e24340ef476fed5abeb7703.tar.gz gdb-1cb8a69ec2955e736e24340ef476fed5abeb7703.tar.bz2 |
gdb: use std::string vector for macro definition
Use std::vector<std::string> when defining macros, to avoid the manual
memory management.
With the use of std::vector, the separate `int argc` parameter is no
longer needed, we can use the size of the vector instead. However, for
some functions, this parameter had a dual function. For object-like
macros, it was interpreted as a `macro_special_kind` enum. For these
functions, remove `argc`, but add a new `special_kind` parameter.
Change-Id: Ice76a6863dfe598335e3b8d5d077513e50975cc5
Approved-By: Tom de Vries <tdevries@suse.de>
Diffstat (limited to 'gdb/dwarf2')
-rw-r--r-- | gdb/dwarf2/macro.c | 28 |
1 files changed, 4 insertions, 24 deletions
diff --git a/gdb/dwarf2/macro.c b/gdb/dwarf2/macro.c index bc781c2..b2bf95d 100644 --- a/gdb/dwarf2/macro.c +++ b/gdb/dwarf2/macro.c @@ -160,9 +160,7 @@ parse_macro_definition (struct macro_source_file *file, int line, /* It's a function-like macro. */ gdb_assert (*p == '('); std::string name (body, p - body); - int argc = 0; - int argv_size = 1; - char **argv = XNEWVEC (char *, argv_size); + std::vector<std::string> argv; p++; @@ -180,16 +178,7 @@ parse_macro_definition (struct macro_source_file *file, int line, if (! *p || p == arg_start) dwarf2_macro_malformed_definition_complaint (body); else - { - /* Make sure argv has room for the new argument. */ - if (argc >= argv_size) - { - argv_size *= 2; - argv = XRESIZEVEC (char *, argv, argv_size); - } - - argv[argc++] = savestring (arg_start, p - arg_start); - } + argv.emplace_back (arg_start, p); p = consume_improper_spaces (p, body); @@ -208,16 +197,12 @@ parse_macro_definition (struct macro_source_file *file, int line, if (*p == ' ') /* Perfectly formed definition, no complaints. */ - macro_define_function (file, line, name.c_str (), - argc, (const char **) argv, - p + 1); + macro_define_function (file, line, name.c_str (), argv, p + 1); else if (*p == '\0') { /* Complain, but do define it. */ dwarf2_macro_malformed_definition_complaint (body); - macro_define_function (file, line, name.c_str (), - argc, (const char **) argv, - p); + macro_define_function (file, line, name.c_str (), argv, p); } else /* Just complain. */ @@ -226,11 +211,6 @@ parse_macro_definition (struct macro_source_file *file, int line, else /* Just complain. */ dwarf2_macro_malformed_definition_complaint (body); - - for (int i = 0; i < argc; i++) - xfree (argv[i]); - - xfree (argv); } /* Skip some bytes from BYTES according to the form given in FORM. |