From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25982 invoked by alias); 15 Nov 2006 17:28:03 -0000 Received: (qmail 25972 invoked by uid 22791); 15 Nov 2006 17:28:02 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 15 Nov 2006 17:27:55 +0000 Received: (qmail 13845 invoked from network); 15 Nov 2006 17:27:53 -0000 Received: from unknown (HELO ?172.16.64.38?) (vladimir@127.0.0.2) by mail.codesourcery.com with ESMTPA; 15 Nov 2006 17:27:53 -0000 From: Vladimir Prus To: Jim Ingham Subject: Re: MI and anonymous unions Date: Wed, 15 Nov 2006 17:28:00 -0000 User-Agent: KMail/1.9.1 Cc: gdb@sources.redhat.com References: <200611151238.16778.vladimir@codesourcery.com> <0F999BE0-8618-44C4-A924-EE55588784EC@apple.com> In-Reply-To: <0F999BE0-8618-44C4-A924-EE55588784EC@apple.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200611152027.44035.vladimir@codesourcery.com> Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2006-11/txt/msg00105.txt.bz2 On Wednesday 15 November 2006 20:20, Jim Ingham wrote: > Support for anonymous unions & structures is another of the "things we > fixed but haven't submitted back"... We do pretty much what Vladimir > suggests, though I use #anon#N for the varobj name: the choice doesn't > much matter. We still return a blank expression (since that's really > what the There's one other tricky bit 'caused by the fact that you > might have more than one anonymous union or structure inside a > structure. This wouldn't be a problem, but the varobj code tends to > look up structure elements by name, which obviously won't work here. > So you have to convert all the code that looks up structure elements > to use the index rather than the name. Ah, I see. So this is not as easy change as I though. > Another of the things we do in our varobj code for C++ is that we look > up the dynamic type of objects (the same mechanism that "set print > object on" uses, and the value & children we return are based on the > dynamic type. As soon as you do that, you really do need a "give me > the expression that can recreate this varobj" for child varobj's. > Otherwise the MI client needs to get all these dynamic casts right to > get down to the proper child, which is a bit of a pain. Good point. > But it's a generally useful command. We called it "var-info-path- > expression" and given a varobj, it returns the expression that if > evaluated would result in the same value. Xcode uses this for "show > in separate window" actions in the debugger variable view. You can > also use the to eliminate the "." for the anonymous structures or > unions - though of course the MI client could do this too... In fact, I've posted a patch that ports -var-info-path-expression to mainline some time ago and we talked briefly with Daniel some time ago. I'll see if I can revive that patch. Thanks, Volodya