From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26531 invoked by alias); 18 May 2009 13:58:08 -0000 Received: (qmail 26520 invoked by uid 22791); 18 May 2009 13:58:07 -0000 X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL,BAYES_00,MSGID_FROM_MTA_HEADER,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mtagate8.de.ibm.com (HELO mtagate8.de.ibm.com) (195.212.29.157) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 18 May 2009 13:58:02 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate8.de.ibm.com (8.14.3/8.13.8) with ESMTP id n4IDvL2R427390 for ; Mon, 18 May 2009 13:57:21 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n4IDvLjK4300928 for ; Mon, 18 May 2009 15:57:21 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n4IDvKkP014251 for ; Mon, 18 May 2009 15:57:21 +0200 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with SMTP id n4IDvJhL013834; Mon, 18 May 2009 15:57:19 +0200 Message-Id: <200905181357.n4IDvJhL013834@d12av02.megacenter.de.ibm.com> Received: by tuxmaker.boeblingen.de.ibm.com (sSMTP sendmail emulation); Mon, 18 May 2009 15:57:19 +0200 Subject: Re: [rfc] Ada simplification: desc_data_type To: brobecker@adacore.com (Joel Brobecker) Date: Mon, 18 May 2009 13:58:00 -0000 From: "Ulrich Weigand" Cc: gdb-patches@sourceware.org In-Reply-To: <20090515150133.GM7292@adacore.com> from "Joel Brobecker" at May 15, 2009 05:01:33 PM MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit 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 X-SW-Source: 2009-05/txt/msg00361.txt.bz2 Joel Brobecker wrote: > > * ada-lang.c (desc_data_type): Remove, replace by ... > > (desc_data_target_type): ... this. > > (thin_data_pntr): Use desc_data_target_type instead of desc_data_type. > > (ada_is_array_descriptor_type): Likewise. > > (ada_type_of_array): Likewise. > > (ada_coerce_to_simple_array_type): Likewise. > > (ada_array_element_type): Likewise. > > Yes, that looks good to me. > > Would you mind making a couple of tiny adjustments for me, please? Sure -- here's the version I've checked in. Thanks, Ulrich ChangeLog: * ada-lang.c (desc_data_type): Remove, replace by ... (desc_data_target_type): ... this. (thin_data_pntr): Use desc_data_target_type instead of desc_data_type. (ada_is_array_descriptor_type): Likewise. (ada_type_of_array): Likewise. (ada_coerce_to_simple_array_type): Likewise. (ada_array_element_type): Likewise. Index: gdb-head/gdb/ada-lang.c =================================================================== --- gdb-head.orig/gdb/ada-lang.c +++ gdb-head/gdb/ada-lang.c @@ -79,7 +79,7 @@ static int fat_pntr_bounds_bitpos (struc static int fat_pntr_bounds_bitsize (struct type *); -static struct type *desc_data_type (struct type *); +static struct type *desc_data_target_type (struct type *); static struct value *desc_data (struct value *); @@ -1281,11 +1281,13 @@ static struct value * thin_data_pntr (struct value *val) { struct type *type = value_type (val); + struct type *data_type = desc_data_target_type (thin_descriptor_type (type)); + data_type = lookup_pointer_type (data_type); + if (TYPE_CODE (type) == TYPE_CODE_PTR) - return value_cast (desc_data_type (thin_descriptor_type (type)), - value_copy (val)); + return value_cast (data_type, value_copy (val)); else - return value_from_longest (desc_data_type (thin_descriptor_type (type)), + return value_from_longest (data_type, VALUE_ADDRESS (val) + value_offset (val)); } @@ -1389,23 +1391,28 @@ fat_pntr_bounds_bitsize (struct type *ty } /* If TYPE is the type of an array descriptor (fat or thin pointer) or a - pointer to one, the type of its array data (a - pointer-to-array-with-no-bounds type); otherwise, NULL. Use - ada_type_of_array to get an array type with bounds data. */ + pointer to one, the type of its array data (a array-with-no-bounds type); + otherwise, NULL. Use ada_type_of_array to get an array type with bounds + data. */ static struct type * -desc_data_type (struct type *type) +desc_data_target_type (struct type *type) { type = desc_base_type (type); /* NOTE: The following is bogus; see comment in desc_bounds. */ if (is_thin_pntr (type)) - return lookup_pointer_type - (desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1))); + return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1)); else if (is_thick_pntr (type)) - return lookup_struct_elt_type (type, "P_ARRAY", 1); - else - return NULL; + { + struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1); + + if (data_type + && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR) + return TYPE_TARGET_TYPE (data_type); + } + + return NULL; } /* If ARR is an array descriptor (fat or thin pointer), a pointer to @@ -1556,18 +1563,14 @@ ada_is_simple_array_type (struct type *t int ada_is_array_descriptor_type (struct type *type) { - struct type *data_type = desc_data_type (type); + struct type *data_type = desc_data_target_type (type); if (type == NULL) return 0; type = ada_check_typedef (type); - return - data_type != NULL - && ((TYPE_CODE (data_type) == TYPE_CODE_PTR - && TYPE_TARGET_TYPE (data_type) != NULL - && TYPE_CODE (TYPE_TARGET_TYPE (data_type)) == TYPE_CODE_ARRAY) - || TYPE_CODE (data_type) == TYPE_CODE_ARRAY) - && desc_arity (desc_bounds_type (type)) > 0; + return (data_type != NULL + && TYPE_CODE (data_type) == TYPE_CODE_ARRAY + && desc_arity (desc_bounds_type (type)) > 0); } /* Non-zero iff type is a partially mal-formed GNAT array @@ -1605,7 +1608,7 @@ ada_type_of_array (struct value *arr, in if (!bounds) return - ada_check_typedef (TYPE_TARGET_TYPE (desc_data_type (value_type (arr)))); + ada_check_typedef (desc_data_target_type (value_type (arr))); else { struct type *elt_type; @@ -1693,7 +1696,7 @@ ada_coerce_to_simple_array_type (struct return decode_packed_array_type (type); if (ada_is_array_descriptor_type (type)) - return ada_check_typedef (TYPE_TARGET_TYPE (desc_data_type (type))); + return ada_check_typedef (desc_data_target_type (type)); return type; } @@ -2377,7 +2380,7 @@ ada_array_element_type (struct type *typ int k; struct type *p_array_type; - p_array_type = desc_data_type (type); + p_array_type = desc_data_target_type (type); k = ada_array_arity (type); if (k == 0) @@ -2386,7 +2389,6 @@ ada_array_element_type (struct type *typ /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */ if (nindices >= 0 && k > nindices) k = nindices; - p_array_type = TYPE_TARGET_TYPE (p_array_type); while (k > 0 && p_array_type != NULL) { p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type)); -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com