From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rock.gnat.com (rock.gnat.com [205.232.38.15]) by sourceware.org (Postfix) with ESMTP id 9AB683850414 for ; Sun, 15 Nov 2020 08:49:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 9AB683850414 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=brobecke@adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 7A8CE56051; Sun, 15 Nov 2020 03:49:52 -0500 (EST) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id WnsPhuDEnyje; Sun, 15 Nov 2020 03:49:52 -0500 (EST) Received: from tron.gnat.com (tron.gnat.com [205.232.38.10]) by rock.gnat.com (Postfix) with ESMTP id 6AEB156050; Sun, 15 Nov 2020 03:49:52 -0500 (EST) Received: by tron.gnat.com (Postfix, from userid 4233) id 67D94111; Sun, 15 Nov 2020 03:49:52 -0500 (EST) From: Joel Brobecker To: gdb-patches@sourceware.org Cc: Simon Marchi , Joel Brobecker Subject: [RFA 3/6] gdbtypes.h: Get rid of the TYPE_FIXED_POINT_INFO macro Date: Sun, 15 Nov 2020 03:49:41 -0500 Message-Id: <1605430184-81335-4-git-send-email-brobecker@adacore.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1605430184-81335-1-git-send-email-brobecker@adacore.com> References: <1604817017-25807-1-git-send-email-brobecker@adacore.com> <1605430184-81335-1-git-send-email-brobecker@adacore.com> X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 15 Nov 2020 08:49:54 -0000 This is one step further towards the removal of all these macros. gdb/ChangeLog: * gdbtypes.h (struct type) : New methods. (INIT_FIXED_POINT_SPECIFIC): Adjust. (TYPE_FIXED_POINT_INFO): Delete macro. (allocate_fixed_point_type_info): Change return type to void. * gdbtypes.c (copy_type_recursive): Replace the use of TYPE_FIXED_POINT_INFO by a call to the fixed_point_info method. (fixed_point_scaling_factor): Likewise. (allocate_fixed_point_type_info): Change return type to void. Adjust implementation accordingly. * dwarf2/read.c (finish_fixed_point_type): Replace the use of TYPE_FIXED_POINT_INFO by a call to the fixed_point_info method. --- gdb/dwarf2/read.c | 4 ++-- gdb/gdbtypes.c | 16 ++++++++-------- gdb/gdbtypes.h | 29 +++++++++++++++++++++++------ 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 3c5982629..cff5a4c 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -18162,7 +18162,7 @@ get_dwarf2_unsigned_rational_constant (struct die_info *die, } /* Assuming DIE corresponds to a fixed point type, finish the creation - of the corresponding TYPE by setting its TYPE_FIXED_POINT_INFO. + of the corresponding TYPE by setting its type-specific data. CU is the DIE's CU. */ static void @@ -18232,7 +18232,7 @@ finish_fixed_point_type (struct type *type, struct die_info *die, sect_offset_str (die->sect_off)); } - gdb_mpq &scaling_factor = TYPE_FIXED_POINT_INFO (type)->scaling_factor; + gdb_mpq &scaling_factor = type->fixed_point_info ().scaling_factor; gdb_mpz tmp_z (scale_num); mpz_set (mpq_numref (scaling_factor.val), tmp_z.val); diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 1c1b0ff..255d9e3 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5498,8 +5498,8 @@ copy_type_recursive (struct objfile *objfile, break; case TYPE_SPECIFIC_FIXED_POINT: INIT_FIXED_POINT_SPECIFIC (new_type); - TYPE_FIXED_POINT_INFO (new_type)->scaling_factor - = TYPE_FIXED_POINT_INFO (type)->scaling_factor; + new_type->fixed_point_info ().scaling_factor + = type->fixed_point_info ().scaling_factor; break; case TYPE_SPECIFIC_INT: TYPE_SPECIFIC_FIELD (new_type) = TYPE_SPECIFIC_INT; @@ -5821,11 +5821,11 @@ static const struct objfile_key /* See gdbtypes.h. */ -fixed_point_type_info * +void allocate_fixed_point_type_info (struct type *type) { std::unique_ptr up (new fixed_point_type_info); - fixed_point_type_info *result; + fixed_point_type_info *info; if (TYPE_OBJFILE_OWNED (type)) { @@ -5833,17 +5833,17 @@ allocate_fixed_point_type_info (struct type *type) = fixed_point_objfile_key.get (TYPE_OBJFILE (type)); if (storage == nullptr) storage = fixed_point_objfile_key.emplace (TYPE_OBJFILE (type)); - result = up.get (); + info = up.get (); storage->push_back (std::move (up)); } else { /* We just leak the memory, because that's what we do generally for non-objfile-attached types. */ - result = up.release (); + info = up.release (); } - return result; + type->set_fixed_point_info (info); } /* See gdbtypes.h. */ @@ -5878,7 +5878,7 @@ fixed_point_scaling_factor (struct type *type) { type = fixed_point_type_base_type (type); - return TYPE_FIXED_POINT_INFO (type)->scaling_factor; + return type->fixed_point_info ().scaling_factor; } diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 5f9ac27..b05d000 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1194,6 +1194,27 @@ struct type this->main_type->m_flag_endianity_not_default = endianity_is_not_default; } + /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return a reference + to this type's fixed_point_info. */ + + struct fixed_point_type_info &fixed_point_info () const + { + gdb_assert (this->code () == TYPE_CODE_FIXED_POINT); + gdb_assert (this->main_type->type_specific.fixed_point_info != nullptr); + + return *this->main_type->type_specific.fixed_point_info; + } + + /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, set this type's + fixed_point_info to INFO. */ + + void set_fixed_point_info (struct fixed_point_type_info *info) const + { + gdb_assert (this->code () == TYPE_CODE_FIXED_POINT); + + this->main_type->type_specific.fixed_point_info = info; + } + /* * Return the dynamic property of the requested KIND from this type's list of dynamic properties. */ dynamic_prop *dyn_prop (dynamic_prop_node_kind kind) const; @@ -1747,7 +1768,7 @@ extern void allocate_gnat_aux_type (struct type *); handled. */ #define INIT_FIXED_POINT_SPECIFIC(type) \ (TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FIXED_POINT, \ - TYPE_FIXED_POINT_INFO (type) = allocate_fixed_point_type_info (type)) + allocate_fixed_point_type_info (type)) #define TYPE_MAIN_TYPE(thistype) (thistype)->main_type #define TYPE_TARGET_TYPE(thistype) TYPE_MAIN_TYPE(thistype)->target_type @@ -1845,9 +1866,6 @@ extern void set_type_vptr_basetype (struct type *, struct type *); (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \ : B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (index))) -#define TYPE_FIXED_POINT_INFO(thistype) \ - (TYPE_MAIN_TYPE(thistype)->type_specific.fixed_point_info) - #define FIELD_NAME(thisfld) ((thisfld).name) #define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind) #define FIELD_BITPOS_LVAL(thisfld) ((thisfld).loc.bitpos) @@ -2575,8 +2593,7 @@ extern const gdb_mpq &fixed_point_scaling_factor (struct type *type); /* Allocate a fixed-point type info for TYPE. This should only be called by INIT_FIXED_POINT_SPECIFIC. */ -extern fixed_point_type_info *allocate_fixed_point_type_info - (struct type *type); +extern void allocate_fixed_point_type_info (struct type *type); /* * When the type includes explicit byte ordering, return that. Otherwise, the byte ordering from gdbarch_byte_order for -- 2.1.4