From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30837 invoked by alias); 22 Oct 2002 16:10:13 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 30792 invoked from network); 22 Oct 2002 16:10:09 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 22 Oct 2002 16:10:09 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id g9MFmpw29858 for ; Tue, 22 Oct 2002 11:48:51 -0400 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9MGA8f14348; Tue, 22 Oct 2002 12:10:08 -0400 Received: from localhost.redhat.com (IDENT:lC3V0OhTXP77bdh/wDwFTgMme7lVG1H1@tooth.toronto.redhat.com [172.16.14.29]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9MGA7w28680; Tue, 22 Oct 2002 12:10:07 -0400 Received: by localhost.redhat.com (Postfix, from userid 469) id 6DB9CFF79; Tue, 22 Oct 2002 12:07:26 -0400 (EDT) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15797.30654.61847.195831@localhost.redhat.com> Date: Tue, 22 Oct 2002 09:10:00 -0000 To: "J. Johnston" Cc: Elena Zannoni , gdb-patches@sources.redhat.com Subject: Re: RFA: revised changes for gdb/mi 792 In-Reply-To: <3DB577A3.8B2BE42C@redhat.com> References: <3DAC86CB.5CE60DE5@redhat.com> <15797.29212.712389.191319@localhost.redhat.com> <3DB577A3.8B2BE42C@redhat.com> X-SW-Source: 2002-10/txt/msg00405.txt.bz2 J. Johnston writes: > Elena Zannoni wrote: > > > > J. Johnston writes: > > > Keith has pointed out some scenarios my original patch did not address and supplied > > > an alternate solution such that I have modified my patch. This replaces the former > > > patch that was posted. > > > > > > > > > > Has this been committed? > > In any event, could the STREQ that you touched be replaced by strcmp()? > > > > I have not applied any patches unless they were approved. This patch has > not been committed. Yes, I can change the STREQs in the new code to be > strcmp. OK, I think Fernando approved it. thanks Elena > > -- Jeff J. > > > Thanks > > Elena > > > > > gdb/ChangeLog: > > > > > > 2002-10-15 Jeff Johnston > > > Keith Seitz > > > > > > * 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. > > > > > > Ok to commit? > > > > > > -- Jeff J.--- varobj.0.c Fri Oct 11 15:46:03 2002 > > > +++ varobj.c Tue Oct 15 17:00:14 2002 > > > @@ -2176,7 +2176,6 @@ > > > { > > > char *name; > > > struct type *type; > > > - int children[3]; > > > > > > if (CPLUS_FAKE_CHILD (parent)) > > > { > > > @@ -2191,55 +2190,97 @@ > > > { > > > case TYPE_CODE_STRUCT: > > > case TYPE_CODE_UNION: > > > - cplus_class_num_children (type, children); > > > - > > > if (CPLUS_FAKE_CHILD (parent)) > > > { > > > - int i; > > > - > > > - /* 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]; > > > + /* The fields of the class type are ordered as they > > > + appear in the class. We are given an index for a > > > + particular access control type ("public","protected", > > > + or "private"). We must skip over fields that don't > > > + have the access control we are looking for to properly > > > + find the indexed field. */ > > > + int type_index = TYPE_N_BASECLASSES (type); > > > + if (STREQ (parent->name, "private")) > > > + { > > > + while (index >= 0) > > > + { > > > + if (TYPE_VPTR_BASETYPE (type) == type > > > + && type_index == TYPE_VPTR_FIELDNO (type)) > > > + ; /* ignore vptr */ > > > + else if (TYPE_FIELD_PRIVATE (type, type_index)) > > > + --index; > > > + ++type_index; > > > + } > > > + --type_index; > > > + } > > > + else if (STREQ (parent->name, "protected")) > > > + { > > > + while (index >= 0) > > > + { > > > + if (TYPE_VPTR_BASETYPE (type) == type > > > + && type_index == TYPE_VPTR_FIELDNO (type)) > > > + ; /* ignore vptr */ > > > + else if (TYPE_FIELD_PROTECTED (type, type_index)) > > > + --index; > > > + ++type_index; > > > + } > > > + --type_index; > > > + } > > > + else > > > + { > > > + while (index >= 0) > > > + { > > > + if (TYPE_VPTR_BASETYPE (type) == type > > > + && type_index == TYPE_VPTR_FIELDNO (type)) > > > + ; /* ignore vptr */ > > > + else if (!TYPE_FIELD_PRIVATE (type, type_index) && > > > + !TYPE_FIELD_PROTECTED (type, type_index)) > > > + --index; > > > + ++type_index; > > > + } > > > + --type_index; > > > + } > > > > > > - name = TYPE_FIELD_NAME (type, i); > > > + name = TYPE_FIELD_NAME (type, type_index); > > > } > > > else if (index < TYPE_N_BASECLASSES (type)) > > > + /* We are looking up the name of a base class */ > > > name = TYPE_FIELD_NAME (type, index); > > > else > > > { > > > + int children[3]; > > > + cplus_class_num_children(type, children); > > > + > > > /* Everything beyond the baseclasses can > > > - only be "public", "private", or "protected" */ > > > + only be "public", "private", or "protected" > > > + > > > + The special "fake" children are always output by varobj in > > > + this order. So if INDEX == 2, it MUST be "protected". */ > > > index -= TYPE_N_BASECLASSES (type); > > > switch (index) > > > { > > > case 0: > > > - if (children[v_public] != 0) > > > - { > > > - name = "public"; > > > - break; > > > - } > > > + if (children[v_public] > 0) > > > + name = "public"; > > > + else if (children[v_private] > 0) > > > + name = "private"; > > > + else > > > + name = "protected"; > > > + break; > > > case 1: > > > - if (children[v_private] != 0) > > > + if (children[v_public] > 0) > > > { > > > - name = "private"; > > > - break; > > > + if (children[v_private] > 0) > > > + name = "private"; > > > + else > > > + name = "protected"; > > > } > > > + else if (children[v_private] > 0) > > > + name = "protected"; > > > + break; > > > case 2: > > > - if (children[v_protected] != 0) > > > - { > > > - name = "protected"; > > > - break; > > > - } > > > + /* Must be protected */ > > > + name = "protected"; > > > + break; > > > default: > > > /* error! */ > > > break;