aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/cp-name-parser.y20
1 files changed, 11 insertions, 9 deletions
diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y
index 9d0085d..14ee6cf 100644
--- a/gdb/cp-name-parser.y
+++ b/gdb/cp-name-parser.y
@@ -75,19 +75,27 @@
struct cpname_state
{
+ cpname_state (const char *input, demangle_parse_info *info)
+ : lexptr (input),
+ prev_lexptr (input),
+ demangle_info (info)
+ { }
+
/* LEXPTR is the current pointer into our lex buffer. PREV_LEXPTR
is the start of the last token lexed, only used for diagnostics.
ERROR_LEXPTR is the first place an error occurred. GLOBAL_ERRMSG
is the first error message encountered. */
- const char *lexptr, *prev_lexptr, *error_lexptr, *global_errmsg;
+ const char *lexptr, *prev_lexptr;
+ const char *error_lexptr = nullptr;
+ const char *global_errmsg = nullptr;
demangle_parse_info *demangle_info;
/* The parse tree created by the parser is stored here after a
successful parse. */
- struct demangle_component *global_result;
+ struct demangle_component *global_result = nullptr;
struct demangle_component *d_grab ();
@@ -2018,14 +2026,8 @@ struct std::unique_ptr<demangle_parse_info>
cp_demangled_name_to_comp (const char *demangled_name,
std::string *errmsg)
{
- cpname_state state;
-
- state.prev_lexptr = state.lexptr = demangled_name;
- state.error_lexptr = NULL;
- state.global_errmsg = NULL;
-
auto result = std::make_unique<demangle_parse_info> ();
- state.demangle_info = result.get ();
+ cpname_state state (demangled_name, result.get ());
if (yyparse (&state))
{