gdbtypes.h: Get rid of the TYPE_FIXED_POINT_INFO macro
authorJoel Brobecker <brobecker@adacore.com>
Tue, 24 Nov 2020 02:47:40 +0000 (21:47 -0500)
committerJoel Brobecker <brobecker@adacore.com>
Tue, 24 Nov 2020 02:47:40 +0000 (21:47 -0500)
This is one step further towards the removal of all these macros.

gdb/ChangeLog:

        * gdbtypes.h (struct type) <fixed_point_info, set_fixed_point_info>:
        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/ChangeLog
gdb/dwarf2/read.c
gdb/gdbtypes.c
gdb/gdbtypes.h

index 3cf45821d6dac708b2602fc972d5178da70c1c26..5e34c7ef440af1b5d7aa472043acb08f4319f2c0 100644 (file)
@@ -1,3 +1,18 @@
+2020-11-24  Joel Brobecker  <brobecker@adacore.com>
+
+       * gdbtypes.h (struct type) <fixed_point_info, set_fixed_point_info>:
+       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.
+
 2020-11-24  Joel Brobecker  <brobecker@adacore.com>
 
        * gmp-utils.h (gdb_mpz::read): Change buf and len parameters
index f8797537108329823572c301e29e7d85d8cf50a0..601a57194364782b1178aa2c6ffce82575a023ea 100644 (file)
@@ -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);
index 3879eebd894f909815a0807dcb5c462ceb55b067..f0d9c24fa34a8241049ea0c0e459cba35e9bd9ff 100644 (file)
@@ -5503,8 +5503,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;
@@ -5826,11 +5826,11 @@ static const struct objfile_key<fixed_point_type_storage>
 
 /* See gdbtypes.h.  */
 
-fixed_point_type_info *
+void
 allocate_fixed_point_type_info (struct type *type)
 {
   std::unique_ptr<fixed_point_type_info> up (new fixed_point_type_info);
-  fixed_point_type_info *result;
+  fixed_point_type_info *info;
 
   if (TYPE_OBJFILE_OWNED (type))
     {
@@ -5838,17 +5838,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.  */
@@ -5883,7 +5883,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;
 }
 
 \f
index 2b6f599f4c7a6aa1d5ba8a4b162ddedc09262fe0..c9d23437cd46bf0027a2895a91ff9629074fa7fc 100644 (file)
@@ -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)
@@ -2582,8 +2600,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