diff options
author | Tom Tromey <tom@tromey.com> | 2018-04-03 18:03:32 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-04-06 15:44:47 -0600 |
commit | 9b5587295bbc57e5e0453b659e24d7c2b504b894 (patch) | |
tree | 7b0aa3fedbcbf91b5fed71ebfc6a629e59aa666c /gdb | |
parent | 850645cfe82f5854af90ce73f2056712e20fcea2 (diff) | |
download | gdb-9b5587295bbc57e5e0453b659e24d7c2b504b894.zip gdb-9b5587295bbc57e5e0453b659e24d7c2b504b894.tar.gz gdb-9b5587295bbc57e5e0453b659e24d7c2b504b894.tar.bz2 |
Change last_examine_value to value_ref_ptr
This patch removes some manual reference count manipulation by
changing last_examine_value to be a value_ref_ptr and then updating
the users.
gdb/ChangeLog
2018-04-06 Tom Tromey <tom@tromey.com>
* printcmd.c (last_examine_address): Change type to
value_ref_ptr.
(do_examine, x_command): Update.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/printcmd.c | 21 |
2 files changed, 14 insertions, 13 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index de4d30f..aa2a6bc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2018-04-06 Tom Tromey <tom@tromey.com> + * printcmd.c (last_examine_address): Change type to + value_ref_ptr. + (do_examine, x_command): Update. + +2018-04-06 Tom Tromey <tom@tromey.com> + * value.c (release_value): Update. * breakpoint.h (struct watchpoint) <val>: Now a value_ref_ptr. (struct bpstats) <val>: Now a value_ref_ptr. diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 8822ae1..a6d6d7e 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -78,7 +78,7 @@ static CORE_ADDR last_examine_address; /* Contents of last address examined. This is not valid past the end of the `x' command! */ -static struct value *last_examine_value; +static value_ref_ptr last_examine_value; /* Largest offset between a symbolic value and an address, that will be printed as `0x1234 <symbol+offset>'. */ @@ -1093,9 +1093,6 @@ do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr) object. */ last_examine_address = next_address; - if (last_examine_value) - value_decref (last_examine_value); - /* The value to be displayed is not fetched greedily. Instead, to avoid the possibility of a fetched value not being used, its retrieval is delayed until the print code @@ -1105,12 +1102,10 @@ do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr) the disassembler be modified so that LAST_EXAMINE_VALUE is left with the byte sequence from the last complete instruction fetched from memory? */ - last_examine_value = value_at_lazy (val_type, next_address); - - if (last_examine_value) - release_value (last_examine_value).release (); + last_examine_value + = release_value (value_at_lazy (val_type, next_address)); - print_formatted (last_examine_value, size, &opts, gdb_stdout); + print_formatted (last_examine_value.get (), size, &opts, gdb_stdout); /* Display any branch delay slots following the final insn. */ if (format == 'i' && count == 1) @@ -1668,12 +1663,12 @@ x_command (const char *exp, int from_tty) last_format = fmt.format; /* Set a couple of internal variables if appropriate. */ - if (last_examine_value) + if (last_examine_value != nullptr) { /* Make last address examined available to the user as $_. Use the correct pointer type. */ struct type *pointer_type - = lookup_pointer_type (value_type (last_examine_value)); + = lookup_pointer_type (value_type (last_examine_value.get ())); set_internalvar (lookup_internalvar ("_"), value_from_pointer (pointer_type, last_examine_address)); @@ -1682,10 +1677,10 @@ x_command (const char *exp, int from_tty) as $__. If the last value has not been fetched from memory then don't fetch it now; instead mark it by voiding the $__ variable. */ - if (value_lazy (last_examine_value)) + if (value_lazy (last_examine_value.get ())) clear_internalvar (lookup_internalvar ("__")); else - set_internalvar (lookup_internalvar ("__"), last_examine_value); + set_internalvar (lookup_internalvar ("__"), last_examine_value.get ()); } } |