Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Elena Zannoni <ezannoni@redhat.com>
To: "J. Johnston" <jjohnstn@redhat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: Patch for gdb/mi 792
Date: Mon, 21 Oct 2002 20:06:00 -0000	[thread overview]
Message-ID: <15796.49177.866732.495080@localhost.redhat.com> (raw)
In-Reply-To: <3DA753C6.DD6CD4FD@redhat.com>

J. Johnston writes:
 > The following is a proposed patch for gdb/mi 792.  The problem occurs because
 > the code is trying to reference public, private, and protected via indexes.
 > The order of the fields in the type are in the order they are entered so the
 > index cannot be used computationally.  The new code takes the index and
 > does a loop through the fields verifying that the field has the desired
 > access control.  It decrements the index until the desired indexed value
 > with the specified access is found.
 > 
 > gdb/ChangeLog:
 > 
 > 2002-10-11  Jeff Johnston  <jjohnstn@redhat.com>
 > 
 > 	* varobj.c (cplus_name_of_child): Change code to handle the fact that
 > 	fields are not necessarily contiguous with regards to their access control.
 > 	This is a fix for PR gdb/792.
 > 
 > May this code be committed?
 > 
 > -- Jeff J.--- varobj.0.c	Fri Oct 11 15:46:03 2002
 > +++ varobj.c	Fri Oct 11 18:28:06 2002
 > @@ -2195,23 +2195,49 @@
 >  
 >        if (CPLUS_FAKE_CHILD (parent))
 >  	{
 > -	  int i;
 > +	  int i = index;
 >  
 >  	  /* Skip over vptr, if it exists. */
 >  	  if (TYPE_VPTR_BASETYPE (type) == type
 >  	      && index >= TYPE_VPTR_FIELDNO (type))
 >  	    index++;
 >  
 > -	  /* FIXME: This assumes that type orders
 > -	     inherited, public, private, protected */
 > -	  i = index + TYPE_N_BASECLASSES (type);
 > -	  if (STREQ (parent->name, "private")
 > -	      || STREQ (parent->name, "protected"))
 > -	    i += children[v_public];
 > -	  if (STREQ (parent->name, "protected"))
 > -	    i += children[v_private];
 > +	  index = TYPE_N_BASECLASSES (type);
 > +	  if (STREQ (parent->name, "private"))

Argh!! STREQ! Run away! We are trying to kill STREQ from gdb, you
should just use strcmp().
[BTW, you know about the ARI? very useful, http://sources.redhat.com/gdb/ari/]



 > +	    {
 > +	      while (i >= 0)
 > +		{
 > +		  if (TYPE_FIELD_PRIVATE (type, index))
 > +		    --i;
 > +		  ++index;
 > +		}
 > +	      --index;
 > +	    }
 > +

How are the fields organized within the structure? I am a bit confused by the
decreasing 'i'.

Elena


	  else if (STREQ (parent->name, "protected"))
 > +	    {
 > +	      while (i >= 0)
 > +		{
 > +		  if (TYPE_FIELD_PROTECTED (type, index))
 > +		    --i;
 > +		  ++index;
 > +		}
 > +	      --index;
 > +	    }
 > +	  else if (STREQ (parent->name, "public"))
 > +	    {
 > +	      while (i >= 0)
 > +		{
 > +		  if (!TYPE_FIELD_PRIVATE (type, index) &&
 > +		      !TYPE_FIELD_PROTECTED (type, index))
 > +		    --i;
 > +		  ++index;
 > +		}
 > +	      --index;
 > +	    }
 > +	  else
 > +	    index += i;
 >  
 > -	  name = TYPE_FIELD_NAME (type, i);
 > +	  name = TYPE_FIELD_NAME (type, index);
 >  	}
 >        else if (index < TYPE_N_BASECLASSES (type))
 >  	name = TYPE_FIELD_NAME (type, index);


  reply	other threads:[~2002-10-22  3:06 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-10-11 15:42 J. Johnston
2002-10-21 20:06 ` Elena Zannoni [this message]
2002-10-22 14:59   ` David Carlton
2002-10-22 15:11     ` Elena Zannoni
2002-10-22 15:19       ` David Carlton
2002-10-22 15:12     ` Andrew Cagney
2002-10-22 15:26       ` David Carlton
2002-10-22 18:05         ` Andrew Cagney
2002-10-22 22:57           ` Eli Zaretskii
2002-10-24 11:53             ` Andrew Cagney
2002-10-24 12:06               ` Eli Zaretskii
2002-10-24 14:29                 ` Andrew Cagney
2002-11-07 13:31 J. Johnston

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=15796.49177.866732.495080@localhost.redhat.com \
    --to=ezannoni@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=jjohnstn@redhat.com \
    /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