Make struct frame_arg self-managing

This changes struct frame_arg to be self-managing and then fixes the
various users.

Tested by the buildbot.

gdb/ChangeLog
2019-08-07  Tom Tromey  <tromey@adacore.com>

	* stack.c (print_frame_arg, read_frame_local, read_frame_arg)
	(print_frame_args): Update.
	* python/py-framefilter.c (py_print_single_arg, enumerate_args):
	Update.
	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
	* frame.h (struct frame_arg): Add initializers.
	<error>: Now a unique_xmalloc_ptr.
This commit is contained in:
Tom Tromey 2019-08-06 13:50:03 -06:00
parent 3d31bc39e6
commit 123cd85148
5 changed files with 22 additions and 25 deletions

View file

@ -390,7 +390,7 @@ print_frame_arg (const frame_print_options &fp_opts,
else
{
if (arg->error)
stb.printf (_("<error reading variable: %s>"), arg->error);
stb.printf (_("<error reading variable: %s>"), arg->error.get ());
else
{
try
@ -452,13 +452,12 @@ read_frame_local (struct symbol *sym, struct frame_info *frame,
}
catch (const gdb_exception_error &except)
{
argp->error = xstrdup (except.what ());
argp->error.reset (xstrdup (except.what ()));
}
}
/* Read in inferior function parameter SYM at FRAME into ARGP. Caller is
responsible for xfree of ARGP->ERROR. This function never throws an
exception. */
/* Read in inferior function parameter SYM at FRAME into ARGP. This
function never throws an exception. */
void
read_frame_arg (const frame_print_options &fp_opts,
@ -626,7 +625,7 @@ read_frame_arg (const frame_print_options &fp_opts,
argp->sym = sym;
argp->val = val;
argp->error = val_error ? xstrdup (val_error) : NULL;
argp->error.reset (val_error ? xstrdup (val_error) : NULL);
if (!val && !val_error)
argp->entry_kind = print_entry_values_only;
else if ((fp_opts.print_entry_values == print_entry_values_compact
@ -641,7 +640,7 @@ read_frame_arg (const frame_print_options &fp_opts,
entryargp->sym = sym;
entryargp->val = entryval;
entryargp->error = entryval_error ? xstrdup (entryval_error) : NULL;
entryargp->error.reset (entryval_error ? xstrdup (entryval_error) : NULL);
if (!entryval && !entryval_error)
entryargp->entry_kind = print_entry_values_no;
else
@ -810,10 +809,8 @@ print_frame_args (const frame_print_options &fp_opts,
if (!print_args)
{
memset (&arg, 0, sizeof (arg));
arg.sym = sym;
arg.entry_kind = print_entry_values_no;
memset (&entryarg, 0, sizeof (entryarg));
entryarg.sym = sym;
entryarg.entry_kind = print_entry_values_no;
}
@ -834,9 +831,6 @@ print_frame_args (const frame_print_options &fp_opts,
print_frame_arg (fp_opts, &entryarg);
}
xfree (arg.error);
xfree (entryarg.error);
first = 0;
}
}