[RFA 00/12] (somewhat) clean up struct value ownership

Pedro Alves palves@redhat.com
Fri Apr 6 19:33:00 GMT 2018


On 04/05/2018 10:14 PM, Tom Tromey wrote:
> struct value has long suffered from a complicated approach to
> ownership.  In particular, values are reference counted, but they are
> also handled specially if they are on the "value chain".  I believe
> this has led to bugs on occasion; and anyway requires oddities like
> release_value_or_incref.
> 
> This series goes some way toward cleaning up ownership for values.  It
> introduces a gdb_ref_ptr specialization for values and then changes
> various things to use it.  After this, it cleans up various code doing
> manual memory mangement related to value; and in particular unifies
> the value chain with the reference counting mechanism.
> 

This is seriously cool.  Thanks much for doing this.

I've sent a few comments here and there, but overall this looks
good to me.

> There is still more work that could be done in this area.  For
> example:
> 
> * struct lval_funcs could be turned into a base class and then the
>   implementers rewritten as ordinary objects.
> 
> * Likewise struct internalvar_funcs; and this would allow better type
>   safety through the removal of union internalvar_data.
> 
> * Perhaps the "location" union could be removed from struct value,
>   also providing more type safety.
> 

Yeah, this would be nice.

> However, I didn't do these, as this series seemed to reach a
> reasonable stopping point.

Definitely agreed.

As I'm reading the series, I'm also wishing for making some of the
value-related free-functions methods of value instead, so that
instead of having to write ref_ptr::get() calls like in:

 struct type *t = value_type (val.get ());

we'd be able to write instead:

 struct type *t = val->type ();

Thanks,
Pedro Alves



More information about the Gdb-patches mailing list