This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Simpify varobj children handling for C++


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]