aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2021-04-01 21:10:08 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2021-04-01 21:10:08 -0400
commitaa70e35c71a2bfa8c2733878b665edb39c171d34 (patch)
tree5d8bcf5241d4d3d37f6cd32468765295dfba68c5
parent3451a2d7a3501e9c3fc344cbc4950c495f30c16d (diff)
downloadgdb-aa70e35c71a2bfa8c2733878b665edb39c171d34.zip
gdb-aa70e35c71a2bfa8c2733878b665edb39c171d34.tar.gz
gdb-aa70e35c71a2bfa8c2733878b665edb39c171d34.tar.bz2
gdb: add type::is_declared_class / type::set_is_declared_class
Add the `is_declared_class` and `set_is_declared_class` methods on `struct type`, in order to remove the `TYPE_DECLARED_CLASS` 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_declared_class, set_is_declared_class>: New methods. (TYPE_DECLARED_CLASS): Use type::is_declared_class, change all write call sites to use type::set_is_declared_class. Change-Id: Idf08d32e137c885a0aba0a18f556a899c1cbfd68
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/dwarf2/read.c4
-rw-r--r--gdb/gdbtypes.h21
3 files changed, 28 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ac40f8e..77395fb 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2021-04-01 Simon Marchi <simon.marchi@efficios.com>
+
+ * gdbtypes.h (struct type) <is_declared_class,
+ set_is_declared_class>: New methods.
+ (TYPE_DECLARED_CLASS): Use type::is_declared_class, change all
+ write call sites to use type::set_is_declared_class.
+
2021-02-28 Boris Staletic <boris.staletic@gmail.com>
* gdb/python/lib/gdb/__init__.py: Use importlib on python 3.4+
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index a83c5f9..9a90d99 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -16147,7 +16147,7 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
}
if (cu->language == language_cplus && die->tag == DW_TAG_class_type)
- TYPE_DECLARED_CLASS (type) = 1;
+ type->set_is_declared_class (true);
/* Store the calling convention in the type if it's available in
the die. Otherwise the calling convention remains set to
@@ -16761,7 +16761,7 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu)
set_type_align (type, TYPE_RAW_ALIGN (underlying_type));
}
- TYPE_DECLARED_CLASS (type) = dwarf2_flag_true_p (die, DW_AT_enum_class, cu);
+ type->set_is_declared_class (dwarf2_flag_true_p (die, DW_AT_enum_class, cu));
set_die_type (die, type, cu);
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 45014a2..7444e7a 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -226,7 +226,7 @@ DEF_ENUM_FLAGS_TYPE (enum type_instance_flag_value, type_instance_flags);
enum types, this is true when "enum class" or "enum struct" was
used to declare the type.. */
-#define TYPE_DECLARED_CLASS(t) (TYPE_MAIN_TYPE (t)->flag_declared_class)
+#define TYPE_DECLARED_CLASS(t) ((t)->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
@@ -815,7 +815,7 @@ struct main_type
/* * True if this type was declared with "class" rather than
"struct". */
- unsigned int flag_declared_class : 1;
+ unsigned int m_flag_declared_class : 1;
/* * True if this is an enum type with disjoint values. This
affects how the enum is printed. */
@@ -1187,6 +1187,23 @@ struct type
this->main_type->m_flag_endianity_not_default = endianity_is_not_default;
}
+
+ /* True if this type was declared using the "class" keyword. This is
+ only valid for C++ structure and enum types. If false, a structure
+ was declared as a "struct"; if true it was declared "class". For
+ enum types, this is true when "enum class" or "enum struct" was
+ used to declare the type. */
+
+ bool is_declared_class () const
+ {
+ return this->main_type->m_flag_declared_class;
+ }
+
+ void set_is_declared_class (bool is_declared_class) const
+ {
+ this->main_type->m_flag_declared_class = is_declared_class;
+ }
+
/* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return a reference
to this type's fixed_point_info. */