This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: Simpify varobj children handling for C++
- From: Daniel Jacobowitz <drow at false dot org>
- To: Vladimir Prus <ghost at cs dot msu dot su>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Wed, 3 Jan 2007 17:32:07 -0500
- Subject: Re: Simpify varobj children handling for C++
- References: <200612240050.30172.ghost@cs.msu.su> <emo1cf$b0v$1@sea.gmane.org>
On Mon, Dec 25, 2006 at 11:16:15AM +0300, Vladimir Prus wrote:
> * value.c (value_as_address): Use coerce_array_proper
> instead of coerce_array so that not fail for references.
> (coerce_array_proper): New function.
> (coerce_array): Use the above.
I definitely need more information on this. What fails beforehand,
and how did you get there?
> @@ -950,7 +950,8 @@ value_ind (struct value *arg1)
> if (TYPE_CODE (base_type) == TYPE_CODE_INT)
> return value_at_lazy (builtin_type_int,
> (CORE_ADDR) value_as_long (arg1));
> - else if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
> + else if (TYPE_CODE (base_type) == TYPE_CODE_PTR
> + || TYPE_CODE (base_type) == TYPE_CODE_PTR)
> {
> struct type *enc_type;
> /* We may be pointing to something embedded in a larger object */
Something tells me you didn't actually need value_ind to handle
references... :-)
> +/* Given a value and a type of a variable object,
"the value and the type of a variable object", because
the value is the property of some specific variable object.
> + adjust those value and type to those necessary
"adjust the"
> + for getting childrens of the variable object.
"children"
> + This includes dereferencing top-level reference
> + to all types and dereferencing pointers to
> + structures.
"references" to match "all types"
> +static void
> +adjust_value_for_children_access (struct value **value,
> + struct type **type)
"adjust_value_for_child_access", also.
> +{
> + gdb_assert (type && *type);
> +
> + *type = check_typedef (*type);
> +
> + /* If the parent is reference, we always strip the
> + reference when getting children, since in C++,
> + reference is basically undistinguishable in
> + usage from a plain variable. */
"is a reference", "in C++, a reference".
> + /* The 'get_target_type' function call check_typedef on
"calls"
> @@ -1876,6 +1886,10 @@ c_describe_child (struct varobj *parent,
> if (cvalue && value)
> gdb_value_ind (value, cvalue);
>
> + /* The get_target_type function calls check_typedef
> + on the result. I'm not sure if showing check_typedefed
> + type for the child as opposed to the declared type is
> + right. */
> if (ctype)
> *ctype = get_target_type (type);
>
It'd be nice if we didn't do that. We go to some effort to show
typedefs in the CLI for ptype.
> + /* This is baseclass. */
"is a"
--
Daniel Jacobowitz
CodeSourcery