Remove a static buffer from cp-name-parser.y
This removes a static buffer from cp-name-parser.y by replacing the fixed-sized buffer with a std::string out parameter. gdb/ChangeLog 2018-06-01 Tom Tromey <tom@tromey.com> * python/py-type.c (typy_legacy_template_argument): Update. * cp-support.h (cp_demangled_name_to_comp): Update. * cp-name-parser.y (cp_demangled_name_to_comp): Change errmsg parameter to be a "std::string *". (main): Update.
This commit is contained in:
parent
e9cb46ab59
commit
3513a6bb20
4 changed files with 20 additions and 16 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2018-06-01 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* python/py-type.c (typy_legacy_template_argument): Update.
|
||||||
|
* cp-support.h (cp_demangled_name_to_comp): Update.
|
||||||
|
* cp-name-parser.y (cp_demangled_name_to_comp): Change errmsg
|
||||||
|
parameter to be a "std::string *".
|
||||||
|
(main): Update.
|
||||||
|
|
||||||
2018-06-01 H.J. Lu <hongjiu.lu@intel.com>
|
2018-06-01 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* ada-lex.l: Include "diagnostics.h" instead of
|
* ada-lex.l: Include "diagnostics.h" instead of
|
||||||
|
|
|
@ -2033,13 +2033,12 @@ cp_merge_demangle_parse_infos (struct demangle_parse_info *dest,
|
||||||
/* Convert a demangled name to a demangle_component tree. On success,
|
/* Convert a demangled name to a demangle_component tree. On success,
|
||||||
a structure containing the root of the new tree is returned. On
|
a structure containing the root of the new tree is returned. On
|
||||||
error, NULL is returned, and an error message will be set in
|
error, NULL is returned, and an error message will be set in
|
||||||
*ERRMSG (which does not need to be freed). */
|
*ERRMSG. */
|
||||||
|
|
||||||
struct std::unique_ptr<demangle_parse_info>
|
struct std::unique_ptr<demangle_parse_info>
|
||||||
cp_demangled_name_to_comp (const char *demangled_name, const char **errmsg)
|
cp_demangled_name_to_comp (const char *demangled_name,
|
||||||
|
std::string *errmsg)
|
||||||
{
|
{
|
||||||
static char errbuf[60];
|
|
||||||
|
|
||||||
prev_lexptr = lexptr = demangled_name;
|
prev_lexptr = lexptr = demangled_name;
|
||||||
error_lexptr = NULL;
|
error_lexptr = NULL;
|
||||||
global_errmsg = NULL;
|
global_errmsg = NULL;
|
||||||
|
@ -2052,12 +2051,8 @@ cp_demangled_name_to_comp (const char *demangled_name, const char **errmsg)
|
||||||
if (yyparse ())
|
if (yyparse ())
|
||||||
{
|
{
|
||||||
if (global_errmsg && errmsg)
|
if (global_errmsg && errmsg)
|
||||||
{
|
*errmsg = string_printf ("%s, near `%s'", global_errmsg,
|
||||||
snprintf (errbuf, sizeof (errbuf) - 2, "%s, near `%s",
|
error_lexptr);
|
||||||
global_errmsg, error_lexptr);
|
|
||||||
strcat (errbuf, "'");
|
|
||||||
*errmsg = errbuf;
|
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2133,7 +2128,6 @@ main (int argc, char **argv)
|
||||||
char *str2, *extra_chars, c;
|
char *str2, *extra_chars, c;
|
||||||
char buf[65536];
|
char buf[65536];
|
||||||
int arg;
|
int arg;
|
||||||
const char *errmsg;
|
|
||||||
|
|
||||||
arg = 1;
|
arg = 1;
|
||||||
if (argv[arg] && strcmp (argv[arg], "--debug") == 0)
|
if (argv[arg] && strcmp (argv[arg], "--debug") == 0)
|
||||||
|
@ -2160,11 +2154,12 @@ main (int argc, char **argv)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string errmsg;
|
||||||
std::unique_ptr<demangle_parse_info> result
|
std::unique_ptr<demangle_parse_info> result
|
||||||
= cp_demangled_name_to_comp (str2, &errmsg);
|
= cp_demangled_name_to_comp (str2, &errmsg);
|
||||||
if (result == NULL)
|
if (result == NULL)
|
||||||
{
|
{
|
||||||
fputs (errmsg, stderr);
|
fputs (errmsg.c_str (), stderr);
|
||||||
fputc ('\n', stderr);
|
fputc ('\n', stderr);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -2181,11 +2176,12 @@ main (int argc, char **argv)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
std::string errmsg;
|
||||||
std::unique_ptr<demangle_parse_info> result
|
std::unique_ptr<demangle_parse_info> result
|
||||||
= cp_demangled_name_to_comp (argv[arg], &errmsg);
|
= cp_demangled_name_to_comp (argv[arg], &errmsg);
|
||||||
if (result == NULL)
|
if (result == NULL)
|
||||||
{
|
{
|
||||||
fputs (errmsg, stderr);
|
fputs (errmsg.c_str (), stderr);
|
||||||
fputc ('\n', stderr);
|
fputc ('\n', stderr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,7 +169,7 @@ struct type *cp_find_type_baseclass_by_name (struct type *parent_type,
|
||||||
/* Functions from cp-name-parser.y. */
|
/* Functions from cp-name-parser.y. */
|
||||||
|
|
||||||
extern std::unique_ptr<demangle_parse_info> cp_demangled_name_to_comp
|
extern std::unique_ptr<demangle_parse_info> cp_demangled_name_to_comp
|
||||||
(const char *demangled_name, const char **errmsg);
|
(const char *demangled_name, std::string *errmsg);
|
||||||
|
|
||||||
extern gdb::unique_xmalloc_ptr<char> cp_comp_to_string
|
extern gdb::unique_xmalloc_ptr<char> cp_comp_to_string
|
||||||
(struct demangle_component *result, int estimated_len);
|
(struct demangle_component *result, int estimated_len);
|
||||||
|
|
|
@ -859,7 +859,7 @@ typy_legacy_template_argument (struct type *type, const struct block *block,
|
||||||
int i;
|
int i;
|
||||||
struct demangle_component *demangled;
|
struct demangle_component *demangled;
|
||||||
std::unique_ptr<demangle_parse_info> info;
|
std::unique_ptr<demangle_parse_info> info;
|
||||||
const char *err;
|
std::string err;
|
||||||
struct type *argtype;
|
struct type *argtype;
|
||||||
|
|
||||||
if (TYPE_NAME (type) == NULL)
|
if (TYPE_NAME (type) == NULL)
|
||||||
|
@ -881,7 +881,7 @@ typy_legacy_template_argument (struct type *type, const struct block *block,
|
||||||
|
|
||||||
if (! info)
|
if (! info)
|
||||||
{
|
{
|
||||||
PyErr_SetString (PyExc_RuntimeError, err);
|
PyErr_SetString (PyExc_RuntimeError, err.c_str ());
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
demangled = info->tree;
|
demangled = info->tree;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue