Use new_reference for struct value

value_incref returned its argument just as a convenience, which in the
end turned out to only be used in precisely the cases where
new_reference helps.  So, this patch changes value_incref to return
void and changes some value-using code to use new_reference.

I also noticed that the comments for value_incref and value_decref
were swapped, so this patch fixes those.

ChangeLog
2018-04-30  Tom Tromey  <tom@tromey.com>

	* varobj.c (install_new_value): Use new_reference.
	* value.h (value_incref): Return void.  Swap intro comment with
	value_decref.
	* value.c (set_value_parent): Use new_reference.
	(value_incref): Return void.  Update intro comment.
	(release_value): Use new_reference.
	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use new_reference.
This commit is contained in:
Tom Tromey 2018-04-29 21:07:03 -06:00
parent 1831a9f9d3
commit bbfa6f0086
5 changed files with 20 additions and 12 deletions

View File

@ -1,3 +1,13 @@
2018-04-30 Tom Tromey <tom@tromey.com>
* varobj.c (install_new_value): Use new_reference.
* value.h (value_incref): Return void. Swap intro comment with
value_decref.
* value.c (set_value_parent): Use new_reference.
(value_incref): Return void. Update intro comment.
(release_value): Use new_reference.
* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use new_reference.
2018-04-30 Tom Tromey <tom@tromey.com>
* symfile-mem.c (symbol_file_add_from_memory): Use new_reference.

View File

@ -2482,7 +2482,7 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
/* Preserve VALUE because we are going to free values back
to the mark, but we still need the value contents
below. */
value_ref_ptr value_holder (value_incref (value));
value_ref_ptr value_holder = value_ref_ptr::new_reference (value);
free_values.free_to_mark ();
retval = allocate_value (subobj_type);

View File

@ -1133,7 +1133,7 @@ value_parent (const struct value *value)
void
set_value_parent (struct value *value, struct value *parent)
{
value->parent = value_ref_ptr (value_incref (parent));
value->parent = value_ref_ptr::new_reference (parent);
}
gdb_byte *
@ -1572,14 +1572,12 @@ value_mark (void)
return all_values.back ().get ();
}
/* Take a reference to VAL. VAL will not be deallocated until all
references are released. */
/* See value.h. */
struct value *
void
value_incref (struct value *val)
{
val->reference_count++;
return val;
}
/* Release a reference to VAL, which was acquired with value_incref.
@ -1635,7 +1633,7 @@ release_value (struct value *val)
/* We must always return an owned reference. Normally this happens
because we transfer the reference from the value chain, but in
this case the value was not on the chain. */
return value_ref_ptr (value_incref (val));
return value_ref_ptr::new_reference (val);
}
/* See value.h. */

View File

@ -88,13 +88,13 @@ struct value_print_options;
struct value;
/* Increase VAL's reference count. */
extern void value_incref (struct value *val);
/* Decrease VAL's reference count. When the reference count drops to
0, VAL will be freed. */
extern struct value *value_incref (struct value *val);
/* Increate VAL's reference count. VAL is returned. */
extern void value_decref (struct value *val);
/* A policy class to interface gdb::ref_ptr with struct value. */

View File

@ -1329,7 +1329,7 @@ install_new_value (struct varobj *var, struct value *value, bool initial)
code that might release it. */
value_ref_ptr value_holder;
if (value != NULL)
value_holder.reset (value_incref (value));
value_holder = value_ref_ptr::new_reference (value);
/* Below, we'll be comparing string rendering of old and new
values. Don't get string rendering if the value is