Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Vladimir Prus <ghost@cs.msu.su>
Cc: gdb-patches@sources.redhat.com
Subject: Re: Simpify varobj children handling for C++
Date: Sat, 20 Jan 2007 19:42:00 -0000	[thread overview]
Message-ID: <20070120194153.GC22153@nevyn.them.org> (raw)
In-Reply-To: <E1H7FxM-00089U-NX@zigzag.lvk.cs.msu.su>

On Wed, Jan 17, 2007 at 09:55:53PM +0300, Vladimir Prus wrote:
> >> @@ -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... :-)
> 
> Why? Because that's a bad idea or because varobj code does not 
> need to dereference rereferences? The latter is true,
> attached version of the patch builds on the 
> "fix 'editable' attribute for references" patch I've posted earlier
> and now 'adjust_value_for_child_access' asserts that the type
> is not reference.

All I meant was that you added "is TYPE_CODE_PTR or is TYPE_CODE_PTR".
I guess you meant to check TYPE_CODE_REF, but you must not have needed
it if you didn't notice the typo.

> +get_value_type (struct varobj *var)
>  {
>    struct type *type;
>  
> -  type = get_type (var);
> +  if (var->value)
> +    type = value_type (var->value);
> +  else
> +    type = var->type;
>  
> -  if (type)
> -    {
> -      if (TYPE_CODE (type) == TYPE_CODE_REF)
> -	type = get_target_type (type);
> -      if (TYPE_CODE (type) == TYPE_CODE_PTR)
> -	type = get_target_type (type);
> -    }
> +  if (TYPE_CODE (type) == TYPE_CODE_REF)
> +    type = get_target_type (type);
> +
> +  type = check_typedef (type);
>  
>    return type;
>  }

I think that if you want to check for references, you need to call
check_typedef first (I just checked that g++ does allow typedefs
to reference types).  Otherwise this looks OK to commit.

It would be nice to have some tests for not stripping typedefs,
if that's practical, but it's not really important.

-- 
Daniel Jacobowitz
CodeSourcery


  reply	other threads:[~2007-01-20 19:42 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-23 21:51 Vladimir Prus
2006-12-25  8:16 ` Vladimir Prus
2007-01-03 22:32   ` Daniel Jacobowitz
2007-01-17 18:57     ` Vladimir Prus
2007-01-20 19:42       ` Daniel Jacobowitz [this message]
2007-01-24 11:11         ` Vladimir Prus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070120194153.GC22153@nevyn.them.org \
    --to=drow@false.org \
    --cc=gdb-patches@sources.redhat.com \
    --cc=ghost@cs.msu.su \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox