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> 2018-04-30 Tom Tromey <tom@tromey.com>
* symfile-mem.c (symbol_file_add_from_memory): Use new_reference. * 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 /* Preserve VALUE because we are going to free values back
to the mark, but we still need the value contents to the mark, but we still need the value contents
below. */ 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 (); free_values.free_to_mark ();
retval = allocate_value (subobj_type); retval = allocate_value (subobj_type);

View file

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

View file

@ -88,13 +88,13 @@ struct value_print_options;
struct value; 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 /* Decrease VAL's reference count. When the reference count drops to
0, VAL will be freed. */ 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); extern void value_decref (struct value *val);
/* A policy class to interface gdb::ref_ptr with struct value. */ /* 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. */ code that might release it. */
value_ref_ptr value_holder; value_ref_ptr value_holder;
if (value != NULL) 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 /* Below, we'll be comparing string rendering of old and new
values. Don't get string rendering if the value is values. Don't get string rendering if the value is