From patchwork Mon Nov 19 21:38:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pawel Wodkowski X-Patchwork-Id: 30207 Received: (qmail 109814 invoked by alias); 19 Nov 2018 21:40:18 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 109725 invoked by uid 89); 19 Nov 2018 21:40:17 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_FAIL autolearn=ham version=3.3.2 spammy= X-HELO: mga07.intel.com Received: from mga07.intel.com (HELO mga07.intel.com) (134.134.136.100) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 19 Nov 2018 21:40:16 +0000 Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Nov 2018 13:40:16 -0800 Received: from kraken.imu.intel.com ([10.217.246.153]) by orsmga004.jf.intel.com with ESMTP; 19 Nov 2018 13:40:14 -0800 From: Pawel Wodkowski To: gdb-patches@sourceware.org, murbanski@pl.sii.eu, sbasierski@pl.sii.eu Cc: tim.wiederhake@intel.com, dragos.carciumaru@intel.com, Bernhard Heckel Subject: [PATCH v2 4/7] Fortran: Ptype, print type extension. Date: Mon, 19 Nov 2018 22:38:47 +0100 Message-Id: <1542663530-140490-4-git-send-email-pwodkowski@pl.sii.eu> In-Reply-To: <1542663530-140490-1-git-send-email-pwodkowski@pl.sii.eu> References: <1542663530-140490-1-git-send-email-pwodkowski@pl.sii.eu> From: Bernhard Heckel Print base-class of an extended type when doing a ptype. 2016-05-24 Bernhard Heckel gdb/Changelog: * gdb/f-typeprint.c (f_type_print_derivation_info): New. (f_type_print_base): Print baseclass info. Changes from V1 to V2: clear commit message. --- gdb/f-typeprint.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c index 3f13c111ac56..133eaf9b9848 100644 --- a/gdb/f-typeprint.c +++ b/gdb/f-typeprint.c @@ -256,6 +256,25 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream, } } +/* If TYPE is an extended type, then print out derivation information. + + A typical output could look like this: + "Type, extends(point) :: waypoint" + " Type point :: point" + " real(kind=4) :: angle" + "End Type waypoint" + */ + +static void +f_type_print_derivation_info (struct type *type, struct ui_file *stream) +{ + /* Fortran doesn't support multiple inheritance. */ + int i = 0; + + if (TYPE_N_BASECLASSES (type) > 0) + fprintf_filtered (stream, ", extends(%s) ::", TYPE_NAME (TYPE_BASECLASS (type, i))); +} + /* Print the name of the type (or the ultimate pointer target, function value or array element), or the description of a structure or union. @@ -372,10 +391,15 @@ f_type_print_base (struct type *type, struct ui_file *stream, int show, case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: if (TYPE_CODE (type) == TYPE_CODE_UNION) - fprintfi_filtered (level, stream, "Type, C_Union :: "); + fprintfi_filtered (level, stream, "Type, C_Union ::"); else - fprintfi_filtered (level, stream, "Type "); - fputs_filtered (TYPE_NAME (type), stream); + fprintfi_filtered (level, stream, "Type"); + + if (show > 0) + f_type_print_derivation_info (type, stream); + + fprintf_filtered (stream, " %s", TYPE_NAME (type)); + /* According to the definition, we only print structure elements in case show > 0. */ if (show > 0)