Turn value_parent into method

This changes value_parent to be a method of value.  Much of this patch
was written by script.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
This commit is contained in:
Tom Tromey
2023-01-31 09:56:33 -07:00
parent 5011c493fb
commit fac7bdaaab
5 changed files with 18 additions and 30 deletions

View File

@ -2842,7 +2842,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
/* Also set the parent value. This is needed when trying to /* Also set the parent value. This is needed when trying to
assign a new value (in inferior memory). */ assign a new value (in inferior memory). */
set_value_parent (v, obj); v->set_parent (obj);
} }
else else
v->set_bitsize (bit_size); v->set_bitsize (bit_size);

View File

@ -171,7 +171,7 @@ rw_pieced_value (value *v, value *from, bool check_optimized)
ULONGEST bits_to_skip = 8 * value_offset (v); ULONGEST bits_to_skip = 8 * value_offset (v);
if (v->bitsize ()) if (v->bitsize ())
{ {
bits_to_skip += (8 * value_offset (value_parent (v)) bits_to_skip += (8 * value_offset (v->parent ())
+ v->bitpos ()); + v->bitpos ());
if (from != nullptr if (from != nullptr
&& (type_byte_order (from->type ()) && (type_byte_order (from->type ())

View File

@ -1125,14 +1125,14 @@ value_assign (struct value *toval, struct value *fromval)
/* Are we dealing with a bitfield? /* Are we dealing with a bitfield?
It is important to mention that `value_parent (toval)' is It is important to mention that `toval->parent ()' is
non-NULL iff `toval->bitsize ()' is non-zero. */ non-NULL iff `toval->bitsize ()' is non-zero. */
if (toval->bitsize ()) if (toval->bitsize ())
{ {
/* VALUE_INTERNALVAR below refers to the parent value, while /* VALUE_INTERNALVAR below refers to the parent value, while
the offset is relative to this parent value. */ the offset is relative to this parent value. */
gdb_assert (value_parent (value_parent (toval)) == NULL); gdb_assert (toval->parent ()->parent () == NULL);
offset += value_offset (value_parent (toval)); offset += value_offset (toval->parent ());
} }
set_internalvar_component (VALUE_INTERNALVAR (toval), set_internalvar_component (VALUE_INTERNALVAR (toval),
@ -1152,7 +1152,7 @@ value_assign (struct value *toval, struct value *fromval)
if (toval->bitsize ()) if (toval->bitsize ())
{ {
struct value *parent = value_parent (toval); struct value *parent = toval->parent ();
changed_addr = value_address (parent) + value_offset (toval); changed_addr = value_address (parent) + value_offset (toval);
changed_len = (toval->bitpos () changed_len = (toval->bitpos ()
@ -1215,7 +1215,7 @@ value_assign (struct value *toval, struct value *fromval)
if (toval->bitsize ()) if (toval->bitsize ())
{ {
struct value *parent = value_parent (toval); struct value *parent = toval->parent ();
LONGEST offset = value_offset (parent) + value_offset (toval); LONGEST offset = value_offset (parent) + value_offset (toval);
size_t changed_len; size_t changed_len;
gdb_byte buffer[sizeof (LONGEST)]; gdb_byte buffer[sizeof (LONGEST)];

View File

@ -1035,20 +1035,6 @@ set_value_offset (struct value *value, LONGEST offset)
value->m_offset = offset; value->m_offset = offset;
} }
struct value *
value_parent (const struct value *value)
{
return value->m_parent.get ();
}
/* See value.h. */
void
set_value_parent (struct value *value, struct value *parent)
{
value->m_parent = value_ref_ptr::new_reference (parent);
}
gdb::array_view<gdb_byte> gdb::array_view<gdb_byte>
value_contents_raw (struct value *value) value_contents_raw (struct value *value)
{ {
@ -3064,7 +3050,7 @@ value_primitive_field (struct value *arg1, LONGEST offset,
v->m_offset = (value_embedded_offset (arg1) v->m_offset = (value_embedded_offset (arg1)
+ offset + offset
+ (bitpos - v->m_bitpos) / 8); + (bitpos - v->m_bitpos) / 8);
set_value_parent (v, arg1); v->set_parent (arg1);
if (!value_lazy (arg1)) if (!value_lazy (arg1))
value_fetch_lazy (v); value_fetch_lazy (v);
} }
@ -3925,7 +3911,7 @@ value_fetch_lazy_bitfield (struct value *val)
per bitfield. It would be even better to read only the containing per bitfield. It would be even better to read only the containing
word, but we have no way to record that just specific bits of a word, but we have no way to record that just specific bits of a
value have been fetched. */ value have been fetched. */
struct value *parent = value_parent (val); struct value *parent = val->parent ();
if (value_lazy (parent)) if (value_lazy (parent))
value_fetch_lazy (parent); value_fetch_lazy (parent);

View File

@ -189,6 +189,15 @@ struct value
void set_bitpos (LONGEST bit) void set_bitpos (LONGEST bit)
{ m_bitpos = bit; } { m_bitpos = bit; }
/* Only used for bitfields; the containing value. This allows a
single read from the target when displaying multiple
bitfields. */
value *parent () const
{ return m_parent.get (); }
void set_parent (struct value *parent)
{ m_parent = value_ref_ptr::new_reference (parent); }
/* Type of value; either not an lval, or one of the various /* Type of value; either not an lval, or one of the various
different possible kinds of lval. */ different possible kinds of lval. */
@ -367,13 +376,6 @@ struct value
ULONGEST m_limited_length = 0; ULONGEST m_limited_length = 0;
}; };
/* Only used for bitfields; the containing value. This allows a
single read from the target when displaying multiple
bitfields. */
struct value *value_parent (const struct value *);
extern void set_value_parent (struct value *value, struct value *parent);
/* Describes offset of a value within lval of a structure in bytes. /* Describes offset of a value within lval of a structure in bytes.
If lval == lval_memory, this is an offset to the address. If lval If lval == lval_memory, this is an offset to the address. If lval
== lval_register, this is a further offset from location.address == lval_register, this is a further offset from location.address