From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 64049 invoked by alias); 16 Mar 2016 22:32:17 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 63989 invoked by uid 89); 16 Mar 2016 22:32:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=achieved, sk:referen, sk:Referen, exploring X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Wed, 16 Mar 2016 22:32:04 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 4BDF1C00F217; Wed, 16 Mar 2016 22:32:03 +0000 (UTC) Received: from valrhona.uglyboxes.com (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u2GMW2Xm017649 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 16 Mar 2016 18:32:03 -0400 From: Keith Seitz Subject: Re: [PATCH v3 08/11] [PR gdb/14441] gdb: python: support rvalue references in the gdb module To: Artemiy Volkov , gdb-patches@sourceware.org References: <1453229609-20159-1-git-send-email-artemiyv@acm.org> <1457147955-21871-1-git-send-email-artemiyv@acm.org> <1457147955-21871-9-git-send-email-artemiyv@acm.org> Message-ID: <56E9DEE2.40101@redhat.com> Date: Wed, 16 Mar 2016 22:32:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <1457147955-21871-9-git-send-email-artemiyv@acm.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2016-03/txt/msg00278.txt.bz2 On 03/04/2016 07:19 PM, Artemiy Volkov wrote: > This patch adds the ability to inspect rvalue reference types and values using > the gdb python module. This is achieved by simply using the ReferenceExplorer > class to handle the objects of rvalue reference types and placing necessary > checks for a TYPE_CODE_RVALUE_REF type code next to the checks for a > TYPE_CODE_REF type code. > > gdb/ChangeLog: > > 2016-03-04 Artemiy Volkov > > * python/lib/gdb/command/explore.py: Support exploring values > of rvalue reference types. > * python/lib/gdb/types.py: Implement get_basic_type() for > rvalue reference types. > * python/py-type.c (pyty_codes) : New > constant. > * python/py-value.c (valpy_getitem): Add an rvalue reference > check. > * python/py-xmethods.c (gdbpy_get_xmethod_result_type) > (gdbpy_invoke_xmethod): Likewise. > --- > gdb/python/lib/gdb/command/explore.py | 2 +- > gdb/python/lib/gdb/types.py | 4 +++- > gdb/python/py-type.c | 1 + > gdb/python/py-value.c | 3 +++ > gdb/python/py-xmethods.c | 14 ++++++++------ > 5 files changed, 16 insertions(+), 8 deletions(-) > > diff --git a/gdb/python/py-xmethods.c b/gdb/python/py-xmethods.c > index d70cdd1..859e346 100644 > --- a/gdb/python/py-xmethods.c > +++ b/gdb/python/py-xmethods.c > @@ -548,10 +548,11 @@ gdbpy_get_xmethod_result_type (const struct extension_language_defn *extlang, > if (!types_equal (obj_type, this_ptr)) > obj = value_cast (this_ptr, obj); > } > - else if (TYPE_CODE (obj_type) == TYPE_CODE_REF) > + else if (TYPE_IS_REFERENCE (obj_type)) > { > - struct type *this_ref = lookup_lvalue_reference_type (this_type); > - > + struct type *this_ref = TYPE_CODE (obj_type) == TYPE_CODE_REF > + ? lookup_lvalue_reference_type (this_type) > + : lookup_rvalue_reference_type (this_type); > if (!types_equal (obj_type, this_ref)) > obj = value_cast (this_ref, obj); > } I see this same paradigm repeated in a handful of places... In other places, I've seen struct type *this_ref = lookup_reference_type (this_type, TYPE_CODE (obj_type); Those are equivalent, right? If so, let's use the above. It's a lot easier/quicker to read than the ternary conditional. > @@ -634,10 +635,11 @@ gdbpy_invoke_xmethod (const struct extension_language_defn *extlang, > if (!types_equal (obj_type, this_ptr)) > obj = value_cast (this_ptr, obj); > } > - else if (TYPE_CODE (obj_type) == TYPE_CODE_REF) > + else if (TYPE_IS_REFERENCE (obj_type)) > { > - struct type *this_ref = lookup_lvalue_reference_type (this_type); > - > + struct type *this_ref = TYPE_CODE (obj_type) == TYPE_CODE_REF > + ? lookup_lvalue_reference_type (this_type) > + : lookup_rvalue_reference_type (this_type); > if (!types_equal (obj_type, this_ref)) > obj = value_cast (this_ref, obj); > } > Likewise? Keith