gdb: add type::is_flag_enum / type::set_is_flag_enum
authorSimon Marchi <simon.marchi@efficios.com>
Fri, 2 Apr 2021 01:10:09 +0000 (21:10 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Fri, 2 Apr 2021 01:10:09 +0000 (21:10 -0400)
Add the `is_flag_enum` and `set_is_flag_enum` methods on `struct type`,
in order to remove the `TYPE_FLAG_ENUM` macro.  In this patch, the macro
is changed to use the getter, so all the call sites of the macro that
are used as a setter are changed to use the setter method directly.  The
next patch will remove the macro completely.

gdb/ChangeLog:

* gdbtypes.h (struct type) <is_flag_enum,
set_is_flag_enum>: New methods.
(TYPE_FLAG_ENUM): Use type::is_flag_enum, change all
write call sites to use type::set_is_flag_enum.

Change-Id: I9c56c91626c8d784947ba94fcb97818526b81d1c

gdb/ChangeLog
gdb/dwarf2/read.c
gdb/gdbtypes.h

index 72403915370047ae4a9846f13577aee9a0765141..1bd2f138ada4fb9a5ea25cde565359dcf4ebed56 100644 (file)
@@ -1,3 +1,10 @@
+2021-04-01  Simon Marchi  <simon.marchi@efficios.com>
+
+       * gdbtypes.h (struct type) <is_flag_enum,
+       set_is_flag_enum>: New methods.
+       (TYPE_FLAG_ENUM): Use type::is_flag_enum, change all
+       write call sites to use type::set_is_flag_enum.
+
 2021-04-01  Simon Marchi  <simon.marchi@efficios.com>
 
        * gdbtypes.h (TYPE_DECLARED_CLASS): Remove, replace all uses
index 165a8090f994dd477ea805b4ffa4f8d94da03f33..49b07d579b554f0705ffe432d9c6f94aa674d591 100644 (file)
@@ -16677,7 +16677,7 @@ update_enumeration_type_from_children (struct die_info *die,
     type->set_is_unsigned (true);
 
   if (flag_enum)
-    TYPE_FLAG_ENUM (type) = 1;
+    type->set_is_flag_enum (true);
 }
 
 /* Given a DW_AT_enumeration_type die, set its type.  We do not
index 9677d068ee1cf87365ca5d9d9d8f1f7b7e0527a1..52c175326924489480da8c23208688a4168eb965 100644 (file)
@@ -220,11 +220,7 @@ DEF_ENUM_FLAGS_TYPE (enum type_instance_flag_value, type_instance_flags);
 
 #define TYPE_NOTTEXT(t)        (((t)->instance_flags ()) & TYPE_INSTANCE_FLAG_NOTTEXT)
 
-/* * True if this type is a "flag" enum.  A flag enum is one where all
-   the values are pairwise disjoint when "and"ed together.  This
-   affects how enum values are printed.  */
-
-#define TYPE_FLAG_ENUM(t) (TYPE_MAIN_TYPE (t)->flag_flag_enum)
+#define TYPE_FLAG_ENUM(t) ((t)->is_flag_enum ())
 
 /* * Constant type.  If this is set, the corresponding type has a
    const modifier.  */
@@ -812,7 +808,7 @@ struct main_type
   /* * True if this is an enum type with disjoint values.  This
      affects how the enum is printed.  */
 
-  unsigned int flag_flag_enum : 1;
+  unsigned int m_flag_flag_enum : 1;
 
   /* * A discriminant telling us which field of the type_specific
      union is being used for this type, if any.  */
@@ -1196,6 +1192,20 @@ struct type
     this->main_type->m_flag_declared_class = is_declared_class;
   }
 
+  /* True if this type is a "flag" enum.  A flag enum is one where all
+     the values are pairwise disjoint when "and"ed together.  This
+     affects how enum values are printed.  */
+
+  bool is_flag_enum () const
+  {
+    return this->main_type->m_flag_flag_enum;
+  }
+
+  void set_is_flag_enum (bool is_flag_enum)
+  {
+    this->main_type->m_flag_flag_enum = is_flag_enum;
+  }
+
   /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return a reference
      to this type's fixed_point_info.  */